Exception im Constructor werfen: Speicherleiche?



  • Hi,

    kurze Frage.
    Wenn ich ein neues Object per new erstelle und in dessem Constrcutor dann eine Exception geworfen wird, muss ich das Object doch trotzdem wieder mit delete freigeben, oder?



  • Suche mal mit einer Suchmaschine Deiner Wahl nach RAII.

    Achso, falsch verstanden...
    Wenn im Ctor eine Exception auftritt, wird das Objekt nicht erzeugt und muss auch nicht freigegeben werden.



  • Nochmal etwas klarer: der "Operator delete" wird in dem Fall "Operator new geht noch, aber Constructor wirft eine Exception" automatisch aufgerufen, d.h. du musst/kannst/darfst dich nicht darum kümmern den Speicher freizugeben. Wäre auch ziemlich doof andersrum.
    Der Destructor wird allerdings NICHT automatisch aufgerufen, da das Objekt ja noch nicht vollständig konstruiert war. Und das ist auch praktisch und gut so (bzw. wäre fatal wenn es nicht so wäre).


Anmelden zum Antworten