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

Можно ли генерировать исключение внутри деструктора и как это повлияет на работу программы?

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

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

sobes.tech AI

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

Это связано с тем, что во время распаковки исключения нельзя безопасно выбрасывать новые исключения — это создаёт ситуацию двойного исключения.

Если всё же нужно сигнализировать об ошибке в деструкторе, лучше использовать другие механизмы, например, логирование или возвращать статус через отдельные методы, но не выбрасывать исключения напрямую.

Пример плохой практики:

struct A {
    ~A() {
        throw std::runtime_error("Ошибка в деструкторе"); // опасно!
    }
};

Такой код может привести к аварийному завершению программы.