Junior — Middle
Kedy sa stáva použitie operátora throw v destructore neprijateľným?
sobes.tech AI
Odpoveď od AI
Použitie operátora throw (v C++ — throw) vo vnútri destruktora sa stáva neprijateľným, ak je destruktor volaný počas spracovania inej výnimky. V takom prípade vyvolanie novej výnimky povedie k volaniu std::terminate(), čo ukončí program.
Inými slovami, ak je destruktor volaný počas šírenia výnimky (napríklad pri opustení bloku try), nemali by sme z destruktora vyhadzovať výnimky. Aby sme tomu zabránili, zvyčajne zachytíme všetky výnimky v destruktore a nedovolíme im uniknúť.
Príklad bezpečného destruktora:
~MyClass() {
try {
// kód, ktorý môže vyhodiť výnimku
} catch (...) {
// spracovanie alebo logovanie, ale nevyhadzujte výnimku
}
}