Re: frage zu objecten in c++

Andre Rudlaff <[email protected]>
Newsgroups gmane.linux.suse.programming
Message-ID <[email protected]>
Am Mittwoch, 16. November 2005 22:50 schrieb Johanns Schneider:

ja, das mit dem new delete stimm schonmal.

> int main()
> {
>     test Test = test();
>     Test.~test();
>     cout << "noch ist es nicht zu ende\n";
> 	Test.say("fehler\n");
>     return 0;
> }

Hier wird nur der Destruktor aufgerufen, der aber das Objekt nicht explizit 
zerstört. Hast das ja am 2. Beispiel gesehen das das gar nicht erlaubt ist.
Ausserdem triggert der Destruktor doch nicht das zerstören des Objekts, 
sondern wird von eben diesem ausgelöst oder sollte ich mich irren?
Ansonsten ist der ja nix weiter als ne Memberfunktion.

Wenn ich jetzt richtig informiert bin wird ein test Test doch automatisch auf 
dem Stack erstellt, ein test *Test dagegen nach der initialisierung mit new() 
im Freispeicher (Heap) bereitgestellt.
Die lokale Variable wird wieder gelöscht, sobald man ihren Gültigkeitsbereich 
verlässt. Und auf diesen Speicherbereich wird delete wohl keine 
Zugriffsrechte haben, darum der Speicherzugriffsfehler.

test *Test = new test();
delete Test;
cout << "noch ist es nicht zu ende\n";
Test->say("fehler\n");

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)
daher sieht man ja häufig sowas:

delete Test;
Test = NULL;

um ungewollten zugriff auf das Objekt sofort feststellen zu können.

-- 
Um die Liste abzubestellen, schicken Sie eine Mail an:
    [email protected]
Um eine Liste aller verfügbaren Kommandos zu bekommen, schicken
Sie eine Mail an: [email protected]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.