Sobes.tech
Back to questions
Junior — Middle
94

Что происходит, если в деструкторе возникает необработанное исключение?

Companies where asked
Открытые РешенияОткрытые Решения

Answer from AI

sobes.tech AI

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

Это связано с тем, что в C++ не допускается одновременная обработка двух исключений (исключение во время обработки другого исключения). Поэтому рекомендуется избегать выбрасывания исключений из деструкторов. Если в деструкторе может возникнуть ошибка, лучше обработать её внутри деструктора или использовать конструкции try-catch, чтобы исключение не вышло наружу.

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

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