Sobes.tech
Junior — Middle

Használható-e a throw operátor destruktoron belül kivétel dobására?

sobes.tech MI

Válasz az MI-től

A C++-ban a destruktorból való kivétel dobása rendkívül nem ajánlott, és súlyos problémákhoz vezethet. Ha a destruktor más kivétel kezelés közben hívódik meg, és a destruktoron belül új kivétel keletkezik, akkor a std::terminate() kerül meghívásra, ami a program váratlan leállását eredményezi.

Ezért:

  • Nem javasolt a throw operátor használata destruktoron belül.
  • Ha hibát kell kezelni a destruktorban, akkor jobb, ha try-catch szerkezeteket alkalmazunk a destruktoron belül, és nem dobunk ki kivételt kifelé.

Biztonságos destruktor példája:

~MyClass() {
    try {
        // kód, ami kivételt okozhat
    } catch (...) {
        // kivétel kezelése, de nem dobjuk tovább
    }
}