Junior — Middle
Comment les exceptions sont-elles gérées à l'intérieur du constructeur et quelles sont les particularités de ce processus?
sobes.tech IA
Réponse de l'IA
En C++, les exceptions levées à l’intérieur du constructeur sont gérées de manière particulière. Si une exception se produit dans le constructeur, l’objet est considéré comme non créé et son destructeur n’est pas appelé.
Caractéristiques :
- L’exception levée dans le constructeur est transmise au code appelant.
- Les membres de l’objet qui ont déjà été créés et partiellement initialisés seront détruits correctement (leurs destructeurs seront appelés).
- Le destructeur de l’objet lui-même n’est pas appelé, car l’objet n’est pas considéré comme complètement créé.
Exemple :
class MyClass {
public:
MyClass() {
// Si une exception est levée ici
throw std::runtime_error("Erreur dans le constructeur");
}
~MyClass() {
// Ce destructeur ne sera pas appelé si une exception est levée dans le constructeur
}
};
int main() {
try {
MyClass obj;
} catch (const std::exception& e) {
std::cout << "Exception attrapée : " << e.what() << std::endl;
}
}
Il est donc important de noter qu’en lançant une exception dans le constructeur, l’objet n’est pas créé, et il faut gérer correctement ces situations.