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
throwoperátor használata destruktoron belül. - Ha hibát kell kezelni a destruktorban, akkor jobb, ha
try-catchszerkezeteket 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
}
}