Junior — Middle
W którym momencie użycie operatora throw wewnątrz destruktora stanie się niedozwolone?
sobes.tech AI
Odpowiedź od AI
Użycie operatora throw (w C++ — throw) wewnątrz destruktora staje się niedozwolone, jeśli destruktor jest wywoływany podczas obsługi innego wyjątku. W takim przypadku wyrzucenie nowego wyjątku spowoduje wywołanie std::terminate(), co zakończy program.
Inaczej mówiąc, jeśli destruktor jest wywoływany podczas propagacji wyjątku (np. podczas wychodzenia z bloku try), nie można wyrzucać wyjątków z destruktora. Aby tego uniknąć, zazwyczaj łapie się wszystkie wyjątki w destruktorze i nie pozwala się im wyjść na zewnątrz.
Przykład bezpiecznego destruktora:
~MyClass() {
try {
// kod, który może wyrzucić wyjątek
} catch (...) {
// obsługa lub logowanie, ale nie wyrzucamy wyjątku
}
}