Middle+
142
questionbank
Если в конструкторе будет вызвано исключение, будет ли вызван деструктор?
Ответ от нейросети
sobes.tech AI
Нет, деструктор не будет вызван.
Если во время выполнения конструктора класса возникает исключение, объект считается не полностью сконструированным. В таком случае C++ не вызывает деструктор для этого частично созданного объекта. Вызываются деструкторы только для полностью сконструированных подобъектов (базовых классов или членов класса).
Пример:
#include <iostream>
#include <stdexcept>
class MyClass {
public:
MyClass() {
std::cout << "Конструктор MyClass" << std::endl;
throw std::runtime_error("Ошибка в конструкторе");
}
~MyClass() {
std::cout << "Деструктор MyClass" << std::endl; // Этот код не будет выполнен
}
};
int main() {
try {
MyClass obj; // Здесь будет брошено исключение
} catch (const std::runtime_error& e) {
std::cerr << "Поймано исключение: " << e.what() << std::endl;
}
return 0;
}
Вывод программы:
Конструктор MyClass
Поймано исключение: Ошибка в конструкторе
Деструктор ~MyClass() не вызывается.