Sobes.tech
Junior — Middle

Kas destruktoris võib kasutada throw operaatorit, et välja visata erand?

sobes.tech AI

Vastus AI-lt

C++-s on destruktorist erandite viskamine äärmiselt ebasoovitav ja võib põhjustada tõsiseid probleeme. Kui destruktor kutsutakse teise erandi töötlemise ajal ja destruktoris visatakse uus erand, kutsutakse std::terminate(), mis viib programmi ootamatu lõpetamiseni.

Seetõttu:

  • Ei ole soovitatav kasutada throw operaatorit destruktoris.
  • Kui on vaja töödelda viga destruktoris, on parem kasutada try-catch struktuure destruktoris ja mitte visata erandeid väljapoole.

Turvalise destruktor näide:

~MyClass() {
    try {
        // kood, mis võib visata erandi
    } catch (...) {
        // erandi töötlemine, kuid mitte edasi viskamine
    }
}