Speicher freigeben bei Exception in Konstruktor



  • Hallo,

    Wenn ich im Programm ein Objekt erstelle mit

    CBeispiel *pBeispiel = new CBeispiel();

    wird dann der Speicher der durch new für CBeispiel bereitgestellt wurde wieder freigeben, falls im Konstruktor von CBeispiel eine Exception auftritt?
    Es geht in dieser Frage NICHT um eventuell im Konstruktor von CBeispiel angelegte Objekte, sondern nur um den Speicher für CBeispiel selbst.

    Falls er nicht freigegeben wird, wie könnte ich ihn manuell freigeben? "delete pBeispiel" kann ich ja schlecht aufrufen, weil das ja zum Aufruf des Dekonstruktors von CBeispiel führen würde.



  • Der Speicher wird garantiert freigegeben. Das gilt aber nur für den Speicher von DIESEM new.



  • Dell schrieb:

    wird dann der Speicher der durch new für CBeispiel bereitgestellt wurde wieder freigeben, falls im Konstruktor von CBeispiel eine Exception auftritt?

    Ja, es wird der Placement-Delete-Operator aufgerufen, der den Speicher freigibt. Der Benutzer kann das alleine schon deshalb nicht, weil das Objekt beim Exception-Fangen nicht mehr im Scope liegt.

    P.S.: Destruktor, nicht Dekonstruktor.


Anmelden zum Antworten