Sobes.tech
Junior — Middle

Je možné použiť operátor throw v destructore na vyhodenie výnimky?

sobes.tech AI

Odpoveď od AI

V C++, je veľmi nežiaduce hádzať výnimky z destruktora, pretože to môže viesť k vážnym problémom. Ak je destruktor volaný počas spracovania inej výnimky a vo vnútri destruktora je hádzaná nová výnimka, volá sa std::terminate(), čo spôsobí náhle ukončenie programu.

Preto:

  • Neodporúča sa používať operátor throw vo vnútri destruktora.
  • Ak je potrebné spracovať chybu v destruktore, je lepšie použiť konštrukcie try-catch vo vnútri samotného destruktora a neházať výnimky von.

Príklad bezpečného destruktora:

~MyClass() {
    try {
        // kód, ktorý môže spôsobiť výnimku
    } catch (...) {
        // spracovanie výnimky, ale nehážeme ju ďalej
    }
}