Sobes.tech
Junior — Middle

Wat gebeurt er met de aanroep van de destructor van een object als er een uitzondering optreedt in de constructor?

sobes.tech AI

Antwoord van AI

Als er een uitzondering optreedt in de constructor van een object in C++, wordt de destructor van dat object niet aangeroepen, omdat het object wordt beschouwd als niet volledig gemaakt.

Echter, de destructors van de leden van het object en de basisklassen die al volledig zijn gemaakt en succesvol zijn geconstrueerd voordat de uitzondering plaatsvindt, worden aangeroepen om de bronnen correct vrij te geven.

Voorbeeld:

class A {
public:
    A() { throw std::runtime_error("Fout in 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; // bij het maken van a in B() wordt een uitzondering gegooid
    } catch (...) {
        std::cout << "Exception opgevangen" << std::endl;
    }
}

In dit voorbeeld wordt de destructor van B niet aangeroepen, omdat het object B niet volledig is gemaakt, maar de destructor van A wordt aangeroepen als A succesvol is geconstrueerd voordat de uitzondering plaatsvindt.