Problem mit new?
-
Hallo,
ich habe ein ein sehr merkwürdiges Verhalten mit einer Klasse und new.
Zuerst habe ich eine Klasse mit einem public pointer ungefähr so:MyClass1 { public: MyClass2* mypointertoclass; }Im Init von MyClass1 muss ich nun:
mypointertoclass = new MyClass2(my parameter);ausführen. Das klappt auch. Die Klasse ist voll funktionstüchtig. Irgendwann mache ich einen:
delete(mypointertoclass);Nu ist sie gelöscht meine Klasse, Merkwürdigerweise wird von MyClass2 nicht der destructor aufgerufen, also rufe ich ihn vorher selber auf

mypointertoclass->~MyClass2(); delete(mypointertoclass);Soweit sogut, nun möchte ich die Klasse neu haben und mache erneut:
mypointertoclass = new MyClass2(my parameter);Das gibt mir dann eine violation, er kommt nicht mal an den Anfang des Kontruktors von MyClass2 wo ich Probehalber eine MessageBox plaziert habe.
Wenn ich das delete weglasse geht es gut, allerdings macht die Klasse dann nicht mehr was sie sollte (Bildchen in DC malen).Was mache ich hier falsch?
Grüße
TheNoName
-
delete ruft den Destructor auf
-
Du musst in MyClass1 einen Destruktor einbauen, der dieses Objekt zerstört.
MyClass1 { MyClass1() : mypointertoclass(NULL) {} ~MyClass1() { delete mypointertoclass; } public: MyClass2* mypointertoclass; }
-
Hallo,
sorry, mein Fehler.
Da hab ich mich wohl beim debuggen verguckt, der Destruktor wird tatsächlich korrekt aufgerufen.Mittlerweile stürzt es auch nicht mehr ab, warum auch immer.
Obwohl die Klasse nun eindeutig aktiv ist, wird trotzdem nichts gezeichnet, das liegt aber bestimmt an etwas anderem ...Grüße
TheNoName
-
Was macht keinen Sinn? Den Zeiger zu initialisieren?
Mit dieser Form garantiere ich aber eine korrekte Initialisierung auch im Falle einer Exception...