2009-01-19 1 views
6

Ich habe einige C++ - Klassen mit einem Destruktor gesehen, der wie folgt definiert ist:Soll ich throw() zu den Deklarationen für meine C++ - Destruktoren hinzufügen?

class someClass 
{ 
    public: 
     someClass(); 
     ~someClass() throw(); 
}; 

Ist das eine gute Idee?

Ich bin mir bewusst, dass Destruktoren niemals Ausnahmen auslösen sollten, aber wird dies tatsächlich verhindern, dass ich Ausnahmen in meine Destruktoren werfen kann? Ich bin nicht 100% sicher, was es garantiert.

Referenz: this recent question

Antwort

7

Es hindert Sie nicht daran, Ausnahmen von Ihrem Destruktor zu werfen. Der Compiler wird es Ihnen immer noch überlassen. Der Unterschied ist, dass wenn Sie eine Ausnahme zulassen, um aus diesem Destruktor zu entkommen, wird Ihr Programm sofort unexpected aufrufen. Diese Funktion ruft unexpected_handler Punkte auf, die standardmäßig terminate ist. Wenn Sie also nichts tun, um eine unerwartete Ausnahme zu behandeln, wird Ihr Programm beendet, was nicht gerade eine schlechte Idee ist. Wenn die Exception wirklich unerwartet ist, dann gibt es nichts wirklich, was Ihr Programm tun könnte, um es trotzdem zu handhaben.

Dies ist nichts Besonderes an Destruktoren; Für alle Methoden gelten die gleichen Regeln.

3

Es ist nicht eine schreckliche Idee. Wenn Sie das dtor einwerfen, während keine Ausnahme verbreitet wird, werden Sie sofort abbrechen, wodurch Sie wissen, dass Sie vergessen haben, ein tatsächliches nicht-werfen dtor zu machen.

Wenn Sie andererseits die Wurfspezifikation verlassen, werden Sie nur über Ihre schlechte dtor-Implementierung wissen, wenn tatsächlich eine Ausnahme ausgelöst wird.

Verwandte Themen