Junior — Middle
Je možné použiť operátor throw v destructore na vyhodenie výnimky?
sobes.tech AI
Odpoveď od AI
V C++, je veľmi nežiaduce hádzať výnimky z destruktora, pretože to môže viesť k vážnym problémom. Ak je destruktor volaný počas spracovania inej výnimky a vo vnútri destruktora je hádzaná nová výnimka, volá sa std::terminate(), čo spôsobí náhle ukončenie programu.
Preto:
- Neodporúča sa používať operátor
throwvo vnútri destruktora. - Ak je potrebné spracovať chybu v destruktore, je lepšie použiť konštrukcie
try-catchvo vnútri samotného destruktora a neházať výnimky von.
Príklad bezpečného destruktora:
~MyClass() {
try {
// kód, ktorý môže spôsobiť výnimku
} catch (...) {
// spracovanie výnimky, ale nehážeme ju ďalej
}
}