Sobes.tech
Junior — Middle

Kdy se stává použití operátoru throw uvnitř destruktoru nepřijatelným?

sobes.tech AI

Odpověď od AI

Použití operátoru throw (v C++ — throw) uvnitř destruktoru je nepřípustné, pokud je destruktor volán během zpracování jiné výjimky. V takovém případě vyvolání nové výjimky povede k volání std::terminate(), což ukončí program.

Jinými slovy, pokud je destruktor volán během šíření výjimky (například při opuštění bloku try), neměli bychom z destruktoru vyhazovat výjimky. Abychom tomu zabránili, obvykle zachytíme všechny výjimky v destruktoru a nedovolíme jim uniknout.

Příklad bezpečného destruktoru:

~MyClass() {
    try {
        // kód, který může vyvolat výjimku
    } catch (...) {
        // zpracování nebo logování, ale nevypouštíme výjimku
    }
}