Sobes.tech
Junior — Middle

Wanneer wordt het gebruik van de operator throw binnen een destructor onacceptabel?

sobes.tech AI

Antwoord van AI

Het gebruik van de operator throw (in C++ — throw) binnen een destructor wordt onacceptabel als de destructor wordt aangeroepen tijdens het afhandelen van een andere uitzondering. In dat geval leidt het gooien van een nieuwe uitzondering tot een oproep van std::terminate(), wat het programma beëindigt.

Met andere woorden, als de destructor wordt aangeroepen tijdens de propagatie van een uitzondering (bijvoorbeeld bij het verlaten van een try-blok), mag er geen uitzondering uit de destructor worden gegooid. Om dit te voorkomen, worden meestal alle uitzonderingen in de destructor opgevangen en niet naar buiten gelaten.

Voorbeeld van een veilige destructor:

~MyClass() {
    try {
        // code die een uitzondering kan gooien
    } catch (...) {
        // afhandeling of logging, maar geen uitzondering gooien
    }
}