Sobes.tech
Junior — Middle

Jak lze zabránit vzniku dvojitých výjimek v programu?

sobes.tech AI

Odpověď od AI

Dvojité výjimky (double exceptions) nastávají, když během zpracování jedné výjimky je vyvolána jiná, což může vést k ukončení programu nebo volání std::terminate.

Abychom tomu předešli:

  • Nevyvolávejte výjimky z destruktorů. Pokud je destruktor volán během zpracování výjimky, nová výjimka povede k std::terminate.
  • Používejte bloky try-catch uvnitř destruktorů, abyste zachytili a zpracovali výjimky, a zabránili jejich uniknutí.
  • Vyhněte se vyvolávání výjimek z funkcí volaných v obsluhách výjimek.
  • Používejte noexcept pro funkce, které nesmí vyvolat výjimku.

Příklad bezpečného destruktoru:

~MyClass() noexcept {
    try {
        // kód, který může vyvolat výjimku
    } catch (...) {
        // zpracování výjimky, například logování
    }
}

Klíčem je zabránit vyvolání výjimek během zpracování jiných výjimek, zejména z destruktorů.