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
}
}