Back to questions
Junior — Middle
80
Какие последствия могут возникнуть, если в деструкторе произойдет выбрасывание исключения?
Companies where asked
LestaGames
Answer from AI
sobes.tech AI
Если в деструкторе выбрасывается исключение, а в момент уничтожения объекта уже происходит обработка другого исключения (например, во время stack unwinding), то это приведёт к вызову std::terminate() и аварийному завершению программы.
Причина в том, что C++ не позволяет двум исключениям одновременно распространяться из одного потока. Поэтому:
- Исключения в деструкторах должны либо не выбрасываться вовсе.
- Либо их нужно перехватывать внутри деструктора и обрабатывать (например, логировать), не давая им выйти наружу.
Пример безопасного деструктора:
~MyClass() {
try {
// код, который может выбросить исключение
} catch (...) {
// обработка исключения, чтобы не допустить выброса
}
}