Frage

Ich habe einige C ++ Klassen mit einem Destruktor definiert gesehen wie folgt:

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

Ist das eine gute Idee?

Ich bin mir sehr wohl bewusst, dass Destruktoren sollten niemals Ausnahmen werfen, aber wird dies mir tatsächlich zu werfen Ausnahmen in meinem Destruktoren verhindern? Ich bin nicht 100% sicher, was es gewährleistet.

Referenz: diese letzte Frage

War es hilfreich?

Lösung

Es hindert Sie nicht von Ausnahmen von Ihrem destructor wirft. Der Compiler wird nach wie vor lassen Sie es tun. Der Unterschied besteht darin, dass , wenn Sie erlauben es eine Ausnahme von diesem destructor zu entkommen, wird Ihr Programm sofort unexpected nennen. Diese Funktion nennt, was auch immer unexpected_handler Punkte auf, die standardmäßig terminate. Also, wenn Sie etwas tun, eine unerwartete Ausnahme zu behandeln, endet das Programm, das nicht ganz schlechte Idee ist. wenn die Ausnahme wirklich Schließlich ist unerwartet, dann ist es nicht wirklich alles, was das Programm wäre in der Lage sein zu tun, es trotzdem zu behandeln.

Das ist nicht etwas Besonderes Destruktoren; gelten die gleichen Regeln für alle Methoden, um Ausnahme Spezifikationen.

Andere Tipps

Es ist nicht eine schreckliche Idee. Wenn Sie in der dtor werfen, während keine Ausnahme propagiert wird, wird abgebrochen Sie sofort mit dem Sie wissen, haben Sie vergessen eine tatsächliche Nicht-Wurf dtor zu machen.

Wenn auf der anderen Seite Sie den Ball verlassen spec, werden Sie nur über Ihre schlechte dtor Implementierung wissen, wann eine Ausnahme ist in der Tat geworfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top