Darf ein Objekt sich im Konstruktor selbst destruieren?
-
Ist folgendes Konstrukt legal:
class MyClass { private: MyClass (void) { // ... delete this; } public: static MyClass* create (void) { return new MyClass; } };?
-
wirf im konstruktor eine exception und du bist auf der sichereren seite.
-
Werden dann die Member-Objekte destruiert?
-
nein, aber durch die Exception kannst du im Exception-Handler delete aufrufen,
wodurch du dem Konflikt aus dem Weg gehst, im Konstruktor delete zu benutzen.
-
DrakoXP schrieb:
nein,
doch, nur bringt es dir nichts, wenn deine member zeiger sind und du ihren speicher dynamisch anforderst. stichwort: smart pointer.
lesetipp: http://www.gotw.ca/gotw/066.htm
-
queer_boy schrieb:
DrakoXP schrieb:
nein,
doch
Gut; das wollte ich wissen. Danke schön.
Smart Pointer sind mir bekannt

-
DrakoXP schrieb:
nein, aber durch die Exception kannst du im Exception-Handler delete aufrufen,
wodurch du dem Konflikt aus dem Weg gehst, im Konstruktor delete zu benutzen.Muss denn delete dann noch explizit aufgerufen werden?
Wird das Objekt nicht schon gelöscht, wenn die Exception den Kontruktor verläßt?Gruß,
Mark
-
Sobald du die exception wirfst (und nicht gleich wieder fängst) wird die Ausführung des Konstruktors abgebrochen und alles was in der Initialisierung (ob mit oder ohne Liste) in umgekehrter Reihenfolge zerstört. Wenn du natürlich normale Pointer hast werden die schlichtweg gelöscht und wenn denen ein Objekt auf dem Heap gehört hat hast ein Speicherleck (deshalb der Hinweis mit Smartpointern weiter oben)
Steht aber auch eigentlich alles in dem GotW das oben verlinkt wurde - die lohnen sich auf jeden Fall immer zu lesen
