Junior — Middle
Que se passe-t-il lors de l'appel du destructeur d'un objet si une exception se produit dans son constructeur?
sobes.tech IA
Réponse de l'IA
Si une exception survient dans le constructeur d’un objet en C++, le destructeur de cet objet n’est pas appelé, car l’objet est considéré comme non entièrement créé.
Cependant, les destructeurs des membres de l’objet et des classes de base qui ont été entièrement créés et construits avec succès avant l’apparition de l’exception seront appelés pour libérer correctement les ressources.
Exemple :
class A {
public:
A() { throw std::runtime_error("Erreur dans le constructeur"); }
~A() { std::cout << "Destructeur A" << std::endl; }
};
class B {
A a;
public:
B() { }
~B() { std::cout << "Destructeur B" << std::endl; }
};
int main() {
try {
B b; // une exception sera levée lors de la création de a dans B()
} catch (...) {
std::cout << "Exception attrapée" << std::endl;
}
}
Dans cet exemple, le destructeur de B ne sera pas appelé, car l’objet B n’a pas été entièrement créé, mais le destructeur de A sera appelé si A a été construit avec succès avant l’exception.