Am Donnerstag, 17. November 2005 02:33 schrieb Andre Rudlaff:
test *Test = new test(); delete Test; cout << "noch ist es nicht zu ende\n"; Test->say("fehler\n");
Krawumm, das Objekt und sein Speicher existieren nicht mehr.
wird zwar so auch funktionieren, ist allerdings sehr gefährlich. Denn der Speicher ist ja nicht mehr reserviert. Es funktioniert hier nur, weil noch keine andere Variable sich diesen Speicherbereich geschnappt hat (und delete die instanzen ja nicht auf 0 setzt)
Der Speicher kann auch von einem anderen x-beliebigen Prozess belegt worden sein. Der übliche Weg ist eigentlich, ein Objekt erst dann zu terminieren, wenn man es definitiv nicht mehr benötigt.
daher sieht man ja häufig sowas:
delete Test; Test = NULL;
um ungewollten zugriff auf das Objekt sofort feststellen zu können.
Das sollte eigentlich sofort knallen, Du schreibst schließlich auf eine Adresse, die Dir nicht mehr gehört. Wenn Du einen Speicherbereich nullen willst, wofür auch immer, musst Du ihn erst NULLen und dann deleten. Grüsse aus Meissen Jörg