Junior — Middle
Kada tampa nepriimtina throw operatoriaus naudojimas destruktoriaus viduje?
sobes.tech AI
Atsakymas iš AI
Naudojant operatorių throw (C++ — throw) destruktoriuje tampa nepriimtina, jei destruktorius kviečiamas kitokio išimties apdorojimo metu. Tokiu atveju naujo išimties išmetimas sukels std::terminate() iškvietimą, kuris užbaigs programą.
Kitaip tariant, jei destruktorius kviečiamas išskleidžiant išimtį (pavyzdžiui, išeinant iš try bloko), iš destruktoriaus negalima išmesti išimčių. Norint to išvengti, paprastai visos išimtys yra gaudomos destruktoriuje ir neleidžiama joms išeiti.
Saugus destruktoriaus pavyzdys:
~MyClass() {
try {
// kodas, kuris gali išmesti išimtį
} catch (...) {
// apdorojimas arba registravimas, bet ne išmetimas
}
}