Einzelnen Beitrag anzeigen

knochen

Registriert seit: 26. Aug 2009
81 Beiträge
 
Delphi 2006 Professional
 
#1

Free, FreeAndNil und mehrere Variablen

  Alt 17. Mai 2010, 14:43
Hallo zusammen,


folgendes Testprogramm (Delphi 2010):

Delphi-Quellcode:
procedure TForm2.Button3Click(Sender: TObject);
var
  a, b: TObject;

begin
  a := TObject.Create;
  b := a;

  Memo1.Lines.Add(IntToStr(Integer(a))); // --> 12003408
  Memo1.Lines.Add(IntToStr(Integer(b))); // --> 12003408

  a.Free; // mit FreeAndNil(a) ist der Effekt derselbe
  a := nil;

  Memo1.Lines.Add('');

  Memo1.Lines.Add(IntToStr(Integer(a))); // --> 0
  Memo1.Lines.Add(IntToStr(Integer(b))); // --> 12003408

end;
Durch die Zuweisung b := a; enthält b einen Verweis auf dasselbe Objekt wie a.
Nachdem a auf nil gesetzt wurde, ergibt Integer(b) immer noch besagte Zahl(s.o.)
Natürlich will ich nicht mit Zahlen herumjonglieren, o.g. Testprogramm dient nur der Veranschaulichung. Fakt ist, dass nachdem a gefreet und genilt wurde, Assigned(b) immer noch True ergibt. Arbeite ich mit diesem "Objekt", so kommt es natürlich früher oder später zu einer Fehlermeldung/ Schutzverletzung.

Kann ich irgenwie erreichen, dass Assigned(b) auch False ist, nachdem a freigegeben wurde?

Vielen Dank im Voraus.
A fool with a tool remains a fool.
  Mit Zitat antworten Zitat