Sobes.tech
Junior — Middle

Mikor válik elfogadhatatlanná a throw operátor használata egy destruktoron belül?

sobes.tech MI

Válasz az MI-től

A throw operátor (C++-ban — throw) használata a destruktoron belül elfogadhatatlan, ha a destruktor más kivétel kezelés közben hívódik meg. Ebben az esetben az új kivétel dobása a std::terminate() hívásához vezet, ami leállítja a programot.

Más szóval, ha a destruktor kivétel terjedése közben hívódik meg (például a try blokk elhagyásakor), nem szabad kivételeket dobni a destruktorból. Ennek elkerülése érdekében általában minden kivételt elkapnak a destruktorban, és nem engedik, hogy kifelé kerüljön.

Biztonságos destruktor példája:

~MyClass() {
    try {
        // kód, ami kivételt dobhat
    } catch (...) {
        // kezelés vagy naplózás, de nem dobunk kivételt
    }
}