Назад к вопросам
Middle+
95
questionbank
Если в конструкторе будет вызвано исключение, будет ли вызван деструктор?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
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() не вызывается.