Sobes.tech
Junior — Middle

Da li je moguće koristiti operator throw unutar destruktora za bacanje izuzetka?

sobes.tech АИ

Одговор од АИ

U C++, baći izbaćivanje izuzetaka iz destruktora je izuzetno nepoželjno i može dovesti do ozbiljnih problema. Ako se destruktor pozove tokom obrade druge izuzetka i unutar destruktora se baci novi izuzetak, poziva se std::terminate(), što dovodi do nenadoknadnog završetka programa.

Zato:

  • Ne preporučuje se korišćenje operatora throw unutar destruktora.
  • Ako je potrebno obraditi grešku u destruktoru, bolje je koristiti konstrukcije try-catch unutar samog destruktora i ne izbacivati izuzetke spolja.

Primer sigurnog destruktora:

~MyClass() {
    try {
        // kod koji može izazvati izuzetak
    } catch (...) {
        // obrada izuzetka, ali ne izbacujemo ga dalje
    }
}