Sobes.tech
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
    }
}