standart destruktor frage
-
Ich habe jetzt schon ein wenig im Forum gelesen , aber eine Frage konnte ich für mich nocht nicht ganz klären.
Wenn ich eine Klasse mit Standart Konstruktor und Destruktor habe , und mit dem Konstruktor ein Dynamisches Objekt mit new erzeuge , dass ich im Destruktor wieder löschen lasse , was genau passiert dann.
Muss ich das Objekt der Klasse erst löschen/zestören , dass der Destruktor mein dynamisches Objekt löscht , oder macht der Destruktor das auch wenn ich das Programm einfach beende ?
-
Mit new erzeugte Objekte müssen immer vom Programmierer mit delete gelöscht werden. Kein mit new angelegtes Objekt wird automatisch gelöscht (was nicht heisst, dass man hierfür nicht was programmieren kann wie z.B. autoptr oder so).
Mit new angelegte Objekte die nicht mit delete gelöscht wurden, werden auch beim Programmende nicht gelöscht. Es ist allerdings möglich, dass das Betriebssystem danach den Speicher frei gibt. Win2000 und WinXP sollten dies eigentlich tun.
-
sono schrieb:
Muss ich das Objekt der Klasse erst löschen/zestören , dass der Destruktor mein dynamisches Objekt löscht
Kommt ganz darauf an, wie du das Klassenobjekt erstellt hast. Grundsätzlich gibt es dabei 3 verschiedene Arten von Speicher.
1. statischer - dieser existiert solange die Anwendung lebt - der dtor wird beim Beenden der Anwendung automatisch aufgerufen, also nach main
2. automatischer - dieser existiert nur im aktuellen Scope - beim Verlassen des Scopes wird der dtor ebenfalls automatisch aufgerufen
3. dynamischer - existiert solange, bis du diesen mittels delete Operator zerstörst - dabei wird erst der dtor, dann Operator delete aufgerufen