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
throwoperaatorit destruktoris. - Kui on vaja töödelda viga destruktoris, on parem kasutada
try-catchstruktuure 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
}
}