Назад к вопросам
Junior — Middle
98
Можно ли генерировать исключение внутри деструктора и как это повлияет на работу программы?
Компании, где спрашивали
ГК Адепт
Ответ от нейросети
sobes.tech AI
Генерировать исключение внутри деструктора в C++ не рекомендуется. Если исключение выбрасывается из деструктора во время обработки другого исключения (например, при выходе из блока try), это приведёт к вызову std::terminate и завершению программы.
Это связано с тем, что во время распаковки исключения нельзя безопасно выбрасывать новые исключения — это создаёт ситуацию двойного исключения.
Если всё же нужно сигнализировать об ошибке в деструкторе, лучше использовать другие механизмы, например, логирование или возвращать статус через отдельные методы, но не выбрасывать исключения напрямую.
Пример плохой практики:
struct A {
~A() {
throw std::runtime_error("Ошибка в деструкторе"); // опасно!
}
};
Такой код может привести к аварийному завершению программы.