Все предоставленные пользователем деструкторы классов, функции освобождения, конструкторы перемещений, операторы назначения перемещений и функции подкачки не должны выходить за исключением. К этим функциям, в зависимости от обстоятельств, должна быть добавлена спецификация исключения noexcept
Все предоставленные пользователем деструкторы классов, функции освобождения, конструкторы перемещений, операторы назначения перемещений и функции подкачки не должны выходить за исключением. К этим функциям, в зависимости от обстоятельств, должна быть добавлена спецификация исключения.
Это правило указывает, что некоторые функции не должны выходить за исключением.
Функции Destructors и deallocation: при возникновении исключения компилятор вызывает функции destructors и deallocation для безопасного удаления объектов в стеке. Если деструктор или функция отмены назначения завершает работу с исключением в это время, компилятор прекращает выполнение программы ненормально. В зависимости от используемого программного или аппаратного обеспечения аварийное завершение программы может привести к утечке ресурсов и возникновению уязвимостей в системе безопасности. Чтобы предотвратить эти проблемы, избегайте деструкторов и функций деаллокатора, которые могут выйти за исключением. Деструкторы и деаллокаторы по умолчанию: noexcept функции. При предоставлении пользовательского деструктора или функции отмены назначения укажите их как noexcept и обрабатывать все исключения в функции, чтобы они не выходили с исключениями. Для полиморфной иерархии классов это правило применяется к деструкторам базового и всех производных классов.
Конструкторы перемещения и операторы назначения перемещения: Если конструктор перемещения или оператор назначения перемещения завершает работу с исключением, невозможно гарантировать, что программа вернется в то состояние, в котором она находилась до операции перемещения. Избегайте конструктора перемещения или оператора назначения перемещения, который может выйти за исключением. Укажите эти функции как noexcept поскольку стандартные библиотечные функции могут избежать операций перемещения, если они не объявлены как noexcept. Можно также объявить эти специальные функции-члены как =default. Дополнительные сведения о том, когда можно объявить специальные функции-члены как =default, см. AUTOSAR C++14 Rule A12-0-1.
Swap functions: Разработчики ожидают, что функция swap не выйдет за исключением. Если функция подкачки завершается с исключением, стандартные алгоритмы библиотеки и операции копирования могут не работать в коде, как ожидалось. Укажите функции подкачки как noexcept. Избегайте операций, которые могут завершиться за исключением функций подкачки.
При использовании шаблонов в качестве универсальных конструкторов перемещений, универсальных операторов назначения перемещений и универсальных функций подкачки эти шаблоны могут иметь динамические спецификации исключений без нарушения этого правила.
Polyspace ® помечает определяемый пользователем деструктор, функцию освобождения, конструктор перемещения, оператор назначения перемещения и функцию подкачки, если это может вызвать исключение. Если функция названаswap или Swap и принимает ссылку в качестве входных данных, Polyspace считает ее функцией подкачки.
Polyspace игнорирует функции, которые объявлены, но не определены.
Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.
| Группа: Обработка особых ситуаций |
| Категория: Обязательно, Автоматизировано |