Middle+
231
¿Se llamará al destructor si se lanza una excepción en el constructor?
Respuesta de la IA
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() не вызывается.