Описание тега exception-safety

1 ответ

Архитектура raii с использованием C++ и glfw

В настоящее время я пытаюсь написать небольшой движок на C++, используя glfw для создания окон. Я хочу активно использовать raii, чтобы создать архитектуру, исключающую исключительные ситуации, и сделать движок практически невозможным для неправильн…
26 янв '18 в 10:33
1 ответ

Реализация std::vector::push_back безопасности сильных исключений

Я внедряю свой собственный вектор, основанный на проекте Сан-Диего после 2018 года ( N4791), и у меня есть несколько вопросов относительно реализации строгой безопасности исключений. Вот некоторый код: template <typename T, typename Allocator>…
05 янв '19 в 11:04
2 ответа

Вызывают ли отложенные функции при вызове log.Fatalln?

db, err := sql.Open("postgres", "…") if err != nil { log.Fatalln(err) } defer db.Close() tpl, err := template.ParseGlob("") if err != nil { log.Fatalln(err) } Если template.ParseGlob("") возвращает ошибку, есть db.Close() все еще звонят?
26 июл '13 в 18:35
2 ответа

Безопасность std::unordered_map::merge()

При написании некоторого кода, предназначенного для C++17, я наткнулся на камень преткновения, определяющий исключительную безопасность операции, объединяющей два совместимых std::unordered_maps. В соответствии с текущим рабочим проектом, §26.2.7, т…
13 июн '17 в 19:47
3 ответа

Можно ли иметь реализацию члена для обмена броском?

Общая рекомендация при написании классов (с использованием идиомы копирования и обмена) заключается в предоставлении функции-члена без броска свопинга. ( Действующий C++, 3-е издание, пункт 25 и другие ресурсы) Однако что, если я не могу предоставит…
1 ответ

Инициализируйте std::array с помощью make_shared

Фон Я пишу драйвер для сетевого протокола и есть функция write(std::shared_ptr<package> package), где package является std::array<buffer_ptr,2> (0=> заголовок, 1=> тело). Для удобства хочу написать функцию write(buffer_ptr body), который…
01 апр '14 в 19:20
2 ответа

Блокировка мьютекса в деструкторе в C++11

У меня есть код, который должен быть потокобезопасным и безопасным для исключений. Код ниже является очень упрощенной версией моей проблемы: #include <mutex> #include <thread> std::mutex mutex; int n=0; class Counter{ public: Counter(){ …
2 ответа

Исключительная безопасность на арене памяти

Я пишу простой распределитель памяти и сталкиваюсь с небольшой проблемой с безопасностью исключений. Ситуация такова, когда вы выделяете объект, который сам вызывает распределитель. Задача пула памяти - выделить несколько объектов одновременно, а за…
21 дек '11 в 15:12
2 ответа

Какова гарантия безопасности исключений для методов получения (по значению)?

Для следующего примера класса, каковы гарантии безопасности исключений для методов получения? Такие методы получения предлагают минимум надежной гарантии? Всегда ли возврат фундаментального типа по значению всегда дает гарантию отсутствия броска? cl…
24 сен '15 в 10:28
2 ответа

Что мешает оптимизации компилятора переупорядочивать строго исключительный код?

Учитывая строго безопасный для исключений код Джона Калба для решения примера Cargill Widget, что мешает компилятору реорганизовать операции и, таким образом, сделать код не слишком безопасным для исключений? #include <algorithm> // std::swap …
1 ответ

std::terminate и деструкторы пустых контейнеров

Рассмотрим некоторый стандартный контейнер, который использует динамическую память (т.е. является AllocatorAwareContainer) и имеет размер и емкость, равные нулю. Например, взять std::vector и позвонить vec.resize(0); vec.shrink_to_fit();, Я предполо…
08 янв '16 в 10:21
7 ответов

Убедитесь, что объект не является нулевым

Как я могу убедиться, что определенный экземпляр класса никогда не будет нулевым? Кто-то сказал мне использовать Debug.Assert(), но при этом я бы только гарантировал, что код работает в режиме отладки, в то время как я хочу также обеспечить условие …
08 ноя '11 в 14:29
2 ответа

Обработка сбоев деструкторами против catch (...) { fix(); бросить; }

Допустим, я делаю что-то, что требует очистки, когда выдается исключение. Например, скажем, я создаю динамический массив, и мне нужно создавать объекты, но их конструкторы могут выдавать исключение: size_t const n = 100; T *const p = static_cast<…
4 ответа

C++ исключение паранойя безопасности: сколько это слишком много?

Строгая гарантия безопасности исключений говорит о том, что операция не изменит никакого состояния программы в случае возникновения исключения. Элегантный способ реализации безопасного копирования-назначения - это идиома копирования и замены. Мои во…
28 мар '12 в 14:30
1 ответ

Исключительная безопасность с конструктором shared_ptr

В Effective C++ 3/E я прочитал это: Это исключительный небезопасный код: class Test { }; void foo(const std::shared_ptr<Test> &ptr, int i); int bar(); ... foo(std::shared_ptr<Test>(new Test), bar()); Потому что компилятор может реали…
25 апр '14 в 10:40
2 ответа

C++: еще один простой охранник

Давайте спросим вас об этом простом ограждении: template <class T> struct finop_t { T& t; ~finop_t() { t(); } }; #define FINALLY__(l, cl) \ auto FIN ## l ## clo = cl; \ finop_t<decltype(FIN ## l ## clo)> FIN ## l ## fin { FIN ## l ##…
10 авг '15 в 17:17
1 ответ

Безопасная обработка пользовательского кода Objective C из базы кода C

Позвольте мне сначала сказать, что у меня очень ограниченные знания в программировании на языке C. У меня есть исполняемый файл C, который вызывает пользовательскую функцию, написанную в Objective C. При условии, что что- либо может произойти в поль…
02 окт '15 в 15:42
2 ответа

Принимайте аргументы и перемещайте семантику для функций, которые могут потерпеть неудачу (строгое исключение безопасности)

У меня есть функция, которая работает с большим количеством данных, передаваемых в качестве аргумента приемника. мой BigData Тип уже поддерживает C++11 и поставляется с полностью функциональным конструктором перемещения и реализациями перемещения, т…
2 ответа

Как предотвратить переполнение буфера / массива?

Недавно я писал код для собственного протокола последовательной связи. Я использовал часть получаемых данных (8/16 бит), чтобы указать, насколько велик размер кадра. Основываясь на этих данных, я ожидаю, что нет данных для подражания. Я использую Cr…
1 ответ

Исключительная гарантия безопасности QCoreApplication::postEvent

Я публикую событие с этим кодом: QEvent*event=new QEvent(QEvent::User); QCoreApplication::postEvent(pointerToSomeQObject,event); QCoreApplication:: postEvent описывается здесь. Тем не менее, нет абсолютно никакой информации о том, что я должен делат…
15 май '14 в 10:03