Mailinglist Archive: opensuse-programming-de (128 mails)

< Previous Next >
Re: frage zu objecten in c++
  • From: Johanns Schneider <thc_gangsta@xxxxxx>
  • Date: Thu, 17 Nov 2005 09:23:19 +0100
  • Message-id: <437C3DF7.4060702@xxxxxx>
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.

< Previous Next >
Follow Ups