Junior — Middle
Ce se întâmplă cu apelul destructorului unui obiect dacă în constructorul său apare o excepție?
sobes.tech AI
Răspuns de la AI
Dacă apare o excepție în constructorul unui obiect în C++, destructorul acelui obiect nu este apelat, deoarece obiectul este considerat a nu fi complet creat.
Cu toate acestea, destructorii membrilor obiectului și ai claselor de bază care au fost deja create cu succes înainte de apariția excepției vor fi apelați pentru eliberarea corectă a resurselor.
Exemplu:
class A {
public:
A() { throw std::runtime_error("Eroare în 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; // la crearea lui a în B() va fi aruncată o excepție
} catch (...) {
std::cout << "Excepție capturată" << std::endl;
}
}
În acest exemplu, destructorul lui B nu va fi apelat, deoarece obiectul B nu a fost complet creat, dar destructorul lui A va fi apelat dacă A a fost construit cu succes înainte de excepție.