Exceptions



  • Tach leute

    Ich lese in meinem Buch gerade das hier:

    "Wenn aus einem Block herausgesprungen wird, werden die Destruktoren aller in diesem Block definierten automatischen Objekte aufgerufen! Diese Objekte werden dabei vom Laufzeit-Stack entfernt"

    Angenommen ich hätte eine Klasse:

    class XYZ
    {
    public:
       ~Destructor() 
       DoSomething() throw(Exception) ;
    };
    

    Und wenn in DoSomething eine Exception ausgeworfen wird, wird der Destructor von dieser Klasse aufgerufen?

    Dann habe ich noch gelesen, dass 'throw' deprecated wäre. Was soll man stattdessen benutzen?

    Danke!



  • Ludwig83 schrieb:

    Und wenn in DoSomething eine Exception ausgeworfen wird, wird der Destructor von dieser Klasse aufgerufen?

    Nein, der Satz aus deinem Buch sagt was anderes. Es werden nur die Objekte zerstört, die in dem lokalen Block des throw -Statements und in den umliegenden Blöcken/Funktionen liegen, bis die Exception gefangen wird.

    void Function()
    {
        XYZ xyz;
        {
            XYZ abc;
            xyz.DoSomething(); // wirft Exception
        } // hier wird abc, aber nicht xyz zerstört
    } // hier wird xyz zerstört
    

    Ludwig83 schrieb:

    Dann habe ich noch gelesen, dass 'throw' deprecated wäre. Was soll man stattdessen benutzen?

    throw ist nicht deprecated. Was in C++0x, dem neuen Standard, deprecated sein wird, sind Exception-Spezifikationen. Stattdessen sollst du gar nichts oder evtl. später noexcept verwenden. Siehe auch hier.


Anmelden zum Antworten