Junior — Middle
¿Qué sucede con la llamada al destructor de un objeto si se produce una excepción en su constructor?
sobes.tech AI
Respuesta de la IA
Si se produce una excepción en el constructor de un objeto en C++, el destructor de ese objeto no se llama, porque el objeto se considera no completamente creado.
Sin embargo, los destructores de los miembros del objeto y de las clases base que ya fueron completamente creados y que se construyeron con éxito antes de que ocurriera la excepción, serán llamados para liberar recursos correctamente.
Ejemplo:
class A {
public:
A() { throw std::runtime_error("Error en el constructor"); }
~A() { std::cout << "Destructor A" << std::endl; }
};
class B {
A a;
public:
B() { }
~B() { std::cout << "Destructor B" << std::endl; }
};
int main() {
try {
B b; // al crear a en B() se lanzará una excepción
} catch (...) {
std::cout << "Excepción atrapada" << std::endl;
}
}
En este ejemplo, el destructor de B no se llamará, ya que el objeto B no fue completamente creado, pero el destructor de A sí se llamará si A fue construido con éxito antes de la excepción.