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.