Junior — Middle
Šta će se desiti sa pozivom destruktora objekta ako u njegovom konstruktoru dođe do izuzetka?
sobes.tech АИ
Одговор од АИ
Ako u konstruktoru objekta u C++ dođe do izuzetka, destruktor tog objekta neće biti pozvan, jer se objekat smatra nedovršeno kreiranim.
Međutim, destruktori već potpuno kreiranih članova objekta i osnovnih klasa, koji su uspešno konstruisani pre pojave izuzetka, biće pozvani radi pravilnog oslobađanja resursa.
Primer:
class A {
public:
A() { throw std::runtime_error("Greška u konstruktoru"); }
~A() { std::cout << "Destruktor A" << std::endl; }
};
class B {
A a;
public:
B() { }
~B() { std::cout << "Destruktor B" << std::endl; }
};
int main() {
try {
B b; // prilikom kreiranja a u B() biće bačena izuzetka
} catch (...) {
std::cout << "Izuzetak uhvaćen" << std::endl;
}
}
U ovom primeru, destruktor B neće biti pozvan, jer objekat B nije bio potpuno kreiran, ali će se pozvati destruktor A ako je A uspešno konstruisan pre izuzetka.