Деструктор помечается как noexcept по умолчанию в C++11 и последующих стандартах для обеспечения корректной работы механизма обработки исключений, особенно при раскрутке стека (stack unwinding).
Основные причины:
std::terminate и аварийному завершению программы. Пометка noexcept указывает компилятору, что деструктор не должен выбрасывать исключений, предотвращая этот сценарий.std::vector) полагаются на то, что деструкторы их элементов не выбрасывают исключений. Это необходимо для обеспечения strong exception safety (строгой гарантии безопасности исключений) или basic exception safety (базовой гарантии безопасности исключений). Если деструктор члена контейнера выбросит исключение, контейнер окажется в некорректном состоянии.noexcept явно указывает намерение программиста, что деструктор не должен завершаться выбросом исключения. Если же исключение все-таки выбрасывается из деструктора, помеченного как noexcept, вызывается std::terminate.Исключение: Спецификатор noexcept(false) явно указывает компилятору, что деструктор может выбросить исключение.
cpp