Sobes.tech
Назад к вопросам
Junior — Middle
81

В какой момент использование оператора throw внутри деструктора станет недопустимым?

Компании, где спрашивали
ГК Адепт

Ответ от нейросети

sobes.tech AI

Использование оператора throw (в C++ — throw) внутри деструктора становится недопустимым, если деструктор вызывается во время обработки другого исключения. В таком случае выбрасывание нового исключения приведёт к вызову std::terminate(), что завершит программу.

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

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

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