Morgen Coding Freunde !
Heute habe ich mal eine kleine verständniss frage zum Destruktor in c++
Also wenn ich das richtig verstanden hab läuft das ganze so ab:
1.Wenn ich ein Objekt erstelle dann befindet sich dieses auf dem Stack.
2. Wenn der Codeblock abgelaufen ist in dem das Objekt lebt stirbt es da es die Gültigkeit verliert
beispielsweiße es wird in der Main erstellt stirbt es also nach der Main.. Das passiert immer egal ob es einen Destruktor besitzt oder nicht (bzw gibt es einen Default Destruktor ?)
3. Allerdings wird dabei nur der Speicher auf dem Stack freigegeben. Falls das Objekt nun aber zusätzlich speicher auf dem Heap reserviert hat entstehen Speicher leks. zum Beispiel ein Array name = new char[4];
4. Also muss im Destruktor explizit der Speicher auf dem Heap mit delete freigegeben werden
Ist das so richtig ?
Wenn ja kann ich mir dann den Destruktor sparen wenn mein Objekt nichts auf dem Heap reserviert oder gehört es einfach zum guten Stil ?
Wenn das richtig ist was ich oben geschrieben habe dann müsste doch auch folgendes beispiel komplett sinnlos sein oder ?
cplusplus.com/reference/std/new/operator%20delete%5B%5D/
Also ich meine abgesehn davon das es die referenz zum delete befehl ist ;)... es müsste doch das Array pt im Konstruktor initailisert werden und delete im Destruktor oder ? Womit dann in diesem Beispiel Konstruktor und Destruktor total sinnlos sind oder ?
Danke für eure Hilfe
Heute habe ich mal eine kleine verständniss frage zum Destruktor in c++
Also wenn ich das richtig verstanden hab läuft das ganze so ab:
1.Wenn ich ein Objekt erstelle dann befindet sich dieses auf dem Stack.
2. Wenn der Codeblock abgelaufen ist in dem das Objekt lebt stirbt es da es die Gültigkeit verliert
beispielsweiße es wird in der Main erstellt stirbt es also nach der Main.. Das passiert immer egal ob es einen Destruktor besitzt oder nicht (bzw gibt es einen Default Destruktor ?)
3. Allerdings wird dabei nur der Speicher auf dem Stack freigegeben. Falls das Objekt nun aber zusätzlich speicher auf dem Heap reserviert hat entstehen Speicher leks. zum Beispiel ein Array name = new char[4];
4. Also muss im Destruktor explizit der Speicher auf dem Heap mit delete freigegeben werden
Ist das so richtig ?
Wenn ja kann ich mir dann den Destruktor sparen wenn mein Objekt nichts auf dem Heap reserviert oder gehört es einfach zum guten Stil ?
Wenn das richtig ist was ich oben geschrieben habe dann müsste doch auch folgendes beispiel komplett sinnlos sein oder ?
cplusplus.com/reference/std/new/operator%20delete%5B%5D/
Also ich meine abgesehn davon das es die referenz zum delete befehl ist ;)... es müsste doch das Array pt im Konstruktor initailisert werden und delete im Destruktor oder ? Womit dann in diesem Beispiel Konstruktor und Destruktor total sinnlos sind oder ?
Danke für eure Hilfe