Jörg Pauly wrote:
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
alao wenn ich das jetzt richtig verstanden habe ist es so besser (richtig?): test *Test = new test(); Test = NULL; delete Test; cout << "noch ist es nicht zu ende\n"; Test->say("fehler\n"); return 0; aber warum lautet meine ausgabe nun test erstellt noch ist es nicht zu ende fehler ?? ich greife doch nachdem ich das object getötet habe und der speicher genullt wurde auf eine methode des objectes zu. Und warum wird die meldung des dekonstuctors nicht mehr angezeigt ?? fragen über fragen ....MFG Johannes -- Es gibt 10 Arten von Menschen auf dieser Welt, die einen verstehen das Binärsystem und die anderen verstehen es nicht.