Destruktoraufruf
-
Wird ein Destruktor (~Klassenname) in C++ (NICHT managed) eigentlich 100%ig aufgerufen, wenn ich ein ein Objekt mit delete lösche?
Eigentlich ist es ja peinlich so etwas zu fragen, aber seit ich gezwungen war Java zu verwenden ist für mich gar nichts mehr 100%ig (Aus der Java-Doku: "nothing is guaranteed"
).
-
hi. willst du trollen? dann bist du hier genau richtig

-
Christoph R. schrieb:
Wird ein Destruktor (~Klassenname) in C++ (NICHT managed) eigentlich 100%ig aufgerufen, wenn ich ein ein Objekt mit delete lösche?
Ja.
-
klar bei c++ kannste dich drauf verlassen.
fazit: c++ ist besser als java.
-
bis auf ganz wenige ausnahmen ja, und bei den ausnahmen ist dein programm eh am popo

-
otze: Welche Ausnahmen?
-
abort()
-
wenn ich ein ein Objekt mit delete lösche
-
Cpt.Tanga: Wie soll denn zwischen delete und dem Destruktoraufruf abort() aufgerufen werden?
!!!!!!: Was willst du mit deinem Zitat sagen?
-
genau das was du gesagt hast :p
-
da war ich wohl ein bischen voreilig -da der destruktor sowieso noch vor dem aufruf vom eigentlichem delete operator aufgerufen wird.
ich meinte eigentlich dass das freigeben eines objektes nach aufruf des delete operators nicht 100 prozentig gesichert ist.
-
der Speicher den man für das Object bei new angelegt hat wird 100pro wieder freigegeben. Aber alle dynamischen Objekte, die das Objekt zuvor angelegt hat werden nicht automatisch gelöscht.
z.b.:class Foo { Blaa* xxxx; Foo() { xxxx = new Blaa(); } ~Foo() { } }Jetzt wird zwar der Speicher der für Foo angelegt wurde durch delete foo; gelöscht, aber der Speicher von xxxx wird nicht freigegeben.
-
nicht wenn man new und delete ueberlaed.
-
DEvent schrieb:
der Speicher den man für das Object bei new angelegt hat wird 100pro wieder freigegeben.
Nein, das ist nicht der Fall bei einer Exception im Destruktor. Siehe auch Richtlinie 11 aus Mehr Effektiv C++ programmieren.
-
Cpt.Tanga schrieb:
nicht wenn man new und delete ueberlaed.
Geht nicht. Du kannst nur operator new und operator delete überladen.
-
Optimizer schrieb:
Cpt.Tanga schrieb:
nicht wenn man new und delete ueberlaed.
Geht nicht. Du kannst nur operator new und operator delete überladen.

Michael E. schrieb:
DEvent schrieb:
der Speicher den man für das Object bei new angelegt hat wird 100pro wieder freigegeben.
Nein, das ist nicht der Fall bei einer Exception im Destruktor. Siehe auch Richtlinie 11 aus Mehr Effektiv C++ programmieren.
->
Cpt.Tanga schrieb:
da der destruktor sowieso noch vor dem aufruf vom eigentlichem delete operator aufgerufen wird
-
Cpt.Tanga schrieb:
Michael E. schrieb:
DEvent schrieb:
der Speicher den man für das Object bei new angelegt hat wird 100pro wieder freigegeben.
Nein, das ist nicht der Fall bei einer Exception im Destruktor. Siehe auch Richtlinie 11 aus Mehr Effektiv C++ programmieren.
->
Cpt.Tanga schrieb:
da der destruktor sowieso noch vor dem aufruf vom eigentlichem delete operator aufgerufen wird
Hat dein Zitat nen Sinn?
-
Michael E. schrieb:
Cpt.Tanga schrieb:
Michael E. schrieb:
DEvent schrieb:
der Speicher den man für das Object bei new angelegt hat wird 100pro wieder freigegeben.
Nein, das ist nicht der Fall bei einer Exception im Destruktor. Siehe auch Richtlinie 11 aus Mehr Effektiv C++ programmieren.
->
Cpt.Tanga schrieb:
da der destruktor sowieso noch vor dem aufruf vom eigentlichem delete operator aufgerufen wird
Hat dein Zitat nen Sinn?
ja, in so fern dass deine feststellung aus meinem zitat bereits mit ein bischen ueberlegung ersichtlich war. ich habe ja als beispiel bereits abort() genannt weswegen ich exceptions nicht weiter erwaehnte da diese auch nur darauf hinauslaufen -sofern sie nicht gefangen werden.
-
Wenns ne Ergänzung war: OK.
-
void *p = (void*)new Foo(); delete p;Undefiniert oder wird das Objekt geloescht? Der Destruktor wird auf jeden Fall nicht aufgerufen, richtig?
-
das kompiliert gar nicht