Ich bin mir der allgemeinen Weisheit bewusst, Ausnahmen in Destruktoren zu vermeiden: Wenn Sie während der Stapelabwicklung eine solche Ausnahme auslösen, wird Ihr Programm beendet. Aber – ich würde solche Fehler lieber nicht einfach „schlucken“ und sie nicht melden – wenn ich kann.
Ist es also legitim/idiomatisch, Code zu schreiben, der sagt:
Code: Select all
~MyClass() noexcept(false) {
auto result = something_which_may_fail_but_wont_throw();
if (is_error(result) and std::uncaught_exceptions() == 0) {
throw some_exception(result);
}
}
Hinweis: Diese Klasse hat keinen Zugriff auf die Standardausgabe-/Fehlerströme, noch auf ein Protokoll usw.
Mobile version