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