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

< Previous Next >
RE: frage zu objecten in c++
  • From: "Alexander Muthler" <alex@xxxxxxxxxx>
  • Date: Thu, 17 Nov 2005 11:57:00 +0100
  • Message-id: <002501c5eb65$a3b09490$3431980a@xxxxxxxxxxxxxxxxxxxxxxxxxx>
> >>> *Test = NULL; // Das nullt den Speicher des Objektes
> >
> >
> > Um das zu machen müsstest Du den =operator überladen, da Du auf ein
> > dereferenziertes Objekt zugreifst.
> > Warum willst Du den Speicher 'nullen', das bringt doch
> nichts. Wenn Du ein
> > delete aufgerufen hast, ist der Bereich doch wieder
> freigegeben (nicht
> > ge'nullt') und der Prozess kann ihn wieder neu allokieren.
> >
> > Grüße
> > Alex
> >
> >
> weil mir das in der liste vorher so gesagt wurde, les dir mal mein
> erstes post durch, dann weißt du wo mein problem ist, oder
> mail mir wenn
> du es nicht hast, dann schick ichs dir nochmal

Okay.

> test Test = test();
> delete &Test;

Sowas geht nicht, da Test auf dem Stack angelegt wurde und nur Gültigkeit im
aktuellen Block (in Deinem Fall die main-Funktion) hat. Wenn Du explizit auf
die Laufzeit Einfluss nehmen möchtest, kannst Du das nur über eine saubere
new/delete Kombination machen. Es ist auch ein guter Stil, nach dem delete
den Pointer(!) zu 0 zu setzen.

Wenn Du danach (also Pointer ist Null) auf eine Memberfunktion zugreifst,

> Test = NULL;
> delete Test; // hat keine Auswirkung, da Test==0
> cout << "noch ist es nicht zu ende\n";
> Test->say("fehler\n");

kannst Du Dich nur auf indifferentes Verhalten verlassen. In Deinem Fall
funktionierte es, wahrscheinlich weil Du auch keine Variablen in der Klasse
hast, die Speicher benötigen. Mit 'richtigen' Klassen sollte der Seg. Fault
die Regel sein. Sowas also nie machen!

Grüße
Alex


< Previous Next >
Follow Ups