Standarddestructor/delete
-
kann ich mir das löschen aller zeiger innerhalb der klasse eigentlich ersparen wenn ich die klasse selbst lösche?
d.h. soll ich nen destruktor erstellen, der das löschen vornimmt oder passiert das per standarddestruktor automatisch
-
Zeiger musst dur nur löschen wenn du mit new oder malloc() dynamischen Speicher verwaltest.
Wenn du zB eine Klasse hast, hier ein Beispiel:
//Header class demo { protected: char *ptr; public: demo(); demo(char *str); ~demo(); }; //Implemetierungsdatei demo::demo() { ptr = new char; *ptr = 0; } demo::demo(char *str) { int pos = 0; for (pos; str[pos]; ++pos) ; ptr = new char[pos+1]; for (pos=0; str[pos]; ++pos) ptr[pos]=str[pos]; ptr[pos]=0; } demo::~demo() { delete ptr; }
Zusammengefasst:
In dem Listening wird lediglich eine Klasse demo definiert, die zwei Konstruktoren hat und einen Destruktor.
Wenn der Konstruktor demo(char)* aufgerufen wird, so wird ptr auf einen Speicherbereich der Länge des Strings str gesetzt und str in diesen Speicherbereich kopiert.
Wenn nun im Destruktor nicht definiert wäre, dass der dynamisch reservierte Speicherbereich, auf den ptr verweist, gelöscht wird, so würde ein Speicherleck oder Speicherloch entstehen.
(Nicht tragisch unter dem emulierten DOS unter Windows, störend nur bei Windows-Programmierung... Ausserdem wären in diesem Beispiel höchstwahrscheinlich kein allzu großer Speicher verschwendet worden, höchstens ein paar Byte, in einem Spiel aber kann bei so einem Fehler sehr viel Speicher verloren gehen.So ich hoffe ich konnte mit meinem Monsterpost (übrigens mein erster hier *g*)
das Thema Destruktoren für Zeiger ein wenig verständlicher machen und habe geholfen.mfg
Cyphexx[ Dieser Beitrag wurde am 25.06.2003 um 00:06 Uhr von Cyphexx editiert. ]
-
erklärung zum destruktor ist hübsch.
aber new[] und delete beissen sich, das beispielchen wird untergehen.
-
Siehe Lektion 5 in Scott Meyers, Effektiv C++ programmieren.
-
@cyph danke... frage beantwortet