Hallo, sagen wir mal ich habe einen Pointer auf eine Klasse. class A { A(); ~A(); }; ... A* a;
und ich will jetzt diesen Pointer nach einer Benutzung auf nix zeigen lassen. Reicht es einfach a=NULL; zu machen oder muss ich delete benutzen. Irgend wie sitze ich grad auf dem Schlauch will aber auf Nummer sicher gehen. -- Latein Unterricht ist die spätere Rache der Römer an den Germanen.
Naja also mit delete gibst du den Speicherbereich frei, den du mit new anforderst(delete [] für new []). Mit einer Zuweisung von NULL lenkst du nur den Zeiger um. Wenn du dir vorher nicht merkst auf was der Zeiger gezeigt hat, bekommst du ein Speicherleck, da du den Speicher ja dann nicht mehr freigeben kannst:
C++:
class foo {};
int main() { foo* inst = new foo; foo* ptr = inst; inst = NULL; // Das ist in Ordnung! delete ptr; }
Was nicht in Ordnung ist:
C++:
class foo {};
int main() { foo* inst = new foo; inst = NULL; }
, da du so nicht mehr den angeforderten Bereich freigeben kannst.
Es gibt kein "nix". Ein Pointer zeigt immer auf eine Adresse im Speicher egal ob die jetzt 0, 1 oder 13363 ist. Es ist aber üblich einen Zeiger auf 0 zeigen zu lassen um zu signalisieren das er nicht im Gebrauch ist, weil du auf der Adresse 0 normalerweise eh nichts machen darfst.
delete musst du benutzen um von dir reservierten Speicher auf den der Pointer zeigt wieder frei zu geben. Das ändert deinen Pointer aber nicht, so dass der nach dem delete immer noch an die selbe Stelle zeigt, nur das die dir dann nicht mehr gehört.
Also wenn ich kein Speicher reserviere reicht es wenn ich den Pointer einfach auf 0 zeigen lasse um zu zeigen das er nicht mehr benutzt wird. Danke -- Latein Unterricht ist die spätere Rache der Römer an den Germanen.