Sollte ich „std::uncaught_Exceptions()“ verwenden, um zu entscheiden, ob ich eine Ausnahme von meinem Dtor auslösen sollC++

Programme in C++. Entwicklerforum
Anonymous
 Sollte ich „std::uncaught_Exceptions()“ verwenden, um zu entscheiden, ob ich eine Ausnahme von meinem Dtor auslösen soll

Post by Anonymous »

Ich habe eine Klasse, deren Konstruktor einen Treiberaufruf ausführt und deren Destruktor den entsprechenden Terminierungs-/Freigabetreiberaufruf ausführt. Diese Anrufe können fehlschlagen. Das Problem besteht natürlich darin, dass solche Fehler im Destruktor auftreten.
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);
}
}
Oder ist das nur barock und keine gute Idee?
Hinweis: Diese Klasse hat keinen Zugriff auf die Standardausgabe-/Fehlerströme, noch auf ein Protokoll usw.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post