Problem mit Destruktor
-
Hallo zusammen,
zwar arbeite ich mit einer Klasse aus einem voherigen Thread, doch das Problem ist ein anderes. Deswegen habe ich mal einen neuen Thread eröffnet.Ich habe eine Klasse, die nun endlich ein dynamisches Formular erstellt. Diese Klasse verfüt natürlich über einen Destruktor, der das Formular wieder löschen soll:
class TCreateForm { ... TCreateForm(TForm* parent, int width, int height, int left, int top, TColor clBack, String cap); //Konstruktor ~TCreateForm(); //Destruktor
Nun steht in meinem Destruktor folgendes:
TCreateForm::~TCreateForm() { delete form; }
form ist das zuvor dynamisch erzeugte Formular. Mein Problem ist nun, dass wenn ich eine Instanz erzeuge, automatisch der Destruktor aufgerufen wird. Das Formular erscheint für eine kurze Zeit. Wenn ich jedoch einen Zeiger erstelle und dann mittels new ein Objekt erzeuge, dann wird der Destruktor nicht aufgerufen...so wie es auch sein sollte.
TCreateForm f(0,100,100,100,100, clRed,"Hello World"); //Destruktor wird gleich mitaufgerufen //oder: TCreateForm *f = new TCreateForm(0,100,100,100,100, clRed,"Hello World"); //Destruktor wird nicht aufgerufen --> so soll es sein!
Kann mir jemand sagen, warum dieses Verhalten auftritt?
Vielen Dank
lg, freakC++
-
Der Destruktor wird automatisch aufgerufen, wenn der Scope beendet wird.
Und da Du diesen Schritt beim new auslässt (es fehlt der zugehörige delete-Aufruf), funktioniert das, wenn du new verwendest. Allerdings hast Du ein Speicherleck. Und falls das delete doch noch irgendwo steht, hast du undefiniertes Verhalten, da die Instanz gelöscht ist und der Speicher zur Verwendung freigegeben ist.
Dann noch gleich der Hinweis auf die Smart-Pointer.
Gruß KK
-
Ahh...super! Wieder was gelernt
Vielen Dank
lg, freakC++