Sobes.tech
Back to questions
Junior — Middle
80

Какие последствия могут возникнуть, если в деструкторе произойдет выбрасывание исключения?

Companies where asked
LestaGames

Answer from AI

sobes.tech AI

Если в деструкторе выбрасывается исключение, а в момент уничтожения объекта уже происходит обработка другого исключения (например, во время stack unwinding), то это приведёт к вызову std::terminate() и аварийному завершению программы.

Причина в том, что C++ не позволяет двум исключениям одновременно распространяться из одного потока. Поэтому:

  • Исключения в деструкторах должны либо не выбрасываться вовсе.
  • Либо их нужно перехватывать внутри деструктора и обрабатывать (например, логировать), не давая им выйти наружу.

Пример безопасного деструктора:

~MyClass() {
    try {
        // код, который может выбросить исключение
    } catch (...) {
        // обработка исключения, чтобы не допустить выброса
    }
}