Sobes.tech
Junior — Middle

Kada postaje neprihvatljivo korišćenje operatora throw unutar destruktora?

sobes.tech АИ

Одговор од АИ

Upotreba operatora throw (u C++ — throw) unutar destruktora postaje neprihvatljiva ako se destruktor pozove tokom obrade druge izuzetka. U tom slučaju, bacanje novog izuzetka će dovesti do poziva std::terminate(), što će završiti program.

Drugim rečima, ako se destruktor pozove tokom širenja izuzetka (na primer, pri izlasku iz try bloka), ne treba da se bacaju izuzeci iz destruktora. Da biste to izbegli, obično uhvatite sve izuzetke u destruktoru i ne dozvoljavate im da izađu napolje.

Primer sigurnog destruktora:

~MyClass() {
    try {
        // kod koji može baciti izuzetak
    } catch (...) {
        // obrada ili logovanje, ali ne bacajte izuzetak
    }
}