Назад к вопросам
Открытые Решения
Junior — Middle
89
Что произойдет с вызовом деструктора объекта, если в его конструкторе возникло исключение?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Если в конструкторе объекта в C++ возникает исключение, то деструктор этого объекта не вызывается, потому что объект считается не полностью созданным.
Однако деструкторы уже полностью созданных членов объекта и базовых классов, которые были успешно сконструированы до возникновения исключения, будут вызваны для корректного освобождения ресурсов.
Пример:
class A {
public:
A() { throw std::runtime_error("Ошибка в конструкторе"); }
~A() { std::cout << "Деструктор A" << std::endl; }
};
class B {
A a;
public:
B() { }
~B() { std::cout << "Деструктор B" << std::endl; }
};
int main() {
try {
B b; // при создании a в B() выбросится исключение
} catch (...) {
std::cout << "Исключение поймано" << std::endl;
}
}
В этом примере деструктор B не вызовется, так как объект B не был полностью создан, но деструктор A вызовется, если A был успешно сконструирован до исключения.