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
throwunutar destruktora. - Ako je potrebno obraditi grešku u destruktoru, bolje je koristiti konstrukcije
try-catchunutar 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
}
}