Das witzige, weniger bekannte Feature zum Einbetten von try-catch in einen Konstruktor:
%Vor%Ja, das ist gültiges C ++. Der zusätzliche Vorteil besteht darin, dass try die Ausnahmen abfängt, die von den Konstruktoren der Datenelemente der Klasse geworfen werden, auch wenn sie im ctor-Initialisierer nicht erwähnt werden oder kein ctor-Initialisierer vorhanden ist:
%Vor%Es könnte möglich sein, einen Ausnahme-Handler vor der Konstruktion / Zerstörung der fraglichen Objekte zu setzen, damit diese Ausnahmen behandelt werden können.
Für Konstruktoren gibt es eine seltsame neue Syntax, mit der Ausnahmen innerhalb des Konstruktors abgefangen werden können. Nicht sicher, wie das funktioniert, und es ist nicht häufig in vielen Compilern implementiert.
Für Destruktoren müssen Sie den Inhalt des Destruktors in einen try {code (); } catch (...) {} blockieren. Was nicht immer das gewünschte Verhalten ist, abhängig davon, was Sie in diesem Destruktor erreichen möchten.
Kurze Antwort: Nein.
Jedes globale Objekt, das eine Exception in seinem Konstruktor auslöst, verursacht eine unbehandelte Exception (das heißt terminate
wird aufgerufen).
Jede Klasse, die eine Ausnahme in ihrem Destruktor auslöst, ist eine defekte Klasse.
Wenn Sie das Singleton-Muster anstelle von globals verwenden, erhalten Sie mehr Optionen.
Tags und Links c++ exception-handling main