Junior — Middle
Kad destruktorā throw operatora lietošana kļūst nepieņemama?
sobes.tech AI
Atbilde no AI
Izmantojot operatoru throw (C++ — throw) destruktorā kļūst nepieņemami, ja destruktoru izsauc citā izņēmuma apstrādes laikā. Šādā gadījumā jauna izņēmuma izmešana novedīs pie std::terminate() izsaukšanas, kas pārtrauks programmu.
Citiem vārdiem, ja destruktoru izsauc izņēmuma izplatīšanās laikā (piemēram, iziešanas no try bloka laikā), no destruktora nevajadzētu izmešot izņēmumus. Lai to novērstu, parasti visi izņēmumi tiek noķerti destruktorā un tiem netiek ļauts iziet ārpus.
Drošs destruktora piemērs:
~MyClass() {
try {
// kods, kas var izraisīt izņēmumu
} catch (...) {
// apstrāde vai reģistrēšana, bet ne izmešana
}
}