Ausnahmebehandlung vor und nach main

7

Ist es möglich, Ausnahmen in diesen Szenarien zu behandeln:

  1. vor dem Aufruf von main ()
  2. aus dem Konstruktor geworfen
  3. wird nach dem Verlassen von main ()
  4. aus dem Destruktor geworfen
shiouming 08.01.2010, 08:23
quelle

4 Antworten

21
  1. Sie können Ihren Konstruktor mit einem try-catch einpacken.
  2. Nein, Sie sollten nie zulassen, dass Exception in einen Destruktor geworfen wird.

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%     
Kornel Kisielewicz 08.01.2010, 08:28
quelle
4

Ja: Verwenden Sie keine gefährlichen globalen Objekte!

    
Potatoswatter 08.01.2010 08:37
quelle
0

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.

    
tobing 08.01.2010 08:28
quelle
0

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.

    
James Hopkin 08.01.2010 09:27
quelle

Tags und Links