Можно, но крайне не рекомендуется. Выброшенное исключение из деструктора может привести к неопределённому поведению, особенно если деструктор вызывается в процессе раскрутки стека из-за другого исключения.
cpp
Основные причины, почему не стоит выбрасывать исключения из деструкторов:
std::terminate()
.В C++11 и новее деструкторы по умолчанию считаются noexcept
, что означает, что они не должны выбрасывать исключения. Если деструктор noexcept
выбрасывает исключение, происходит немедленный вызов std::terminate()
. Чтобы разрешить деструктору выбрасывать исключения, его нужно явно объявить как noexcept(false)
.
cpp
Можно, но крайне не рекомендуется. Выброшенное исключение из деструктора может привести к неопределённому поведению, особенно если деструктор вызывается в процессе раскрутки стека из-за другого исключения.
cpp
Основные причины, почему не стоит выбрасывать исключения из деструкторов:
std::terminate()
.В C++11 и новее деструкторы по умолчанию считаются noexcept
, что означает, что они не должны выбрасывать исключения. Если деструктор noexcept
выбрасывает исключение, происходит немедленный вызов std::terminate()
. Чтобы разрешить деструктору выбрасывать исключения, его нужно явно объявить как noexcept(false)
.
cpp
Зарегистрируйтесь или войдите, чтобы получить доступ к полным ответам на все вопросы из банка вопросов.