Sobes.tech
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
    }
}