Middle+
150
questionbank
Если в конструкторе будет вызвано исключение, будет ли вызван деструктор?
Answer from AI
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() не вызывается.