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
}
}