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