Einzelnen Beitrag anzeigen

mezen

Registriert seit: 13. Jul 2011
Ort: Lippstadt
30 Beiträge
 
Delphi 10.1 Berlin Professional
 
#11

AW: Objectlist.Add(). überladen

  Alt 22. Aug 2011, 07:11
Delphi-Quellcode:
   EinObjekt := TObject.Create();
   EinObjekt.Name := '1';
   Objektliste.Add(EinObjekt);
   {EinObjekt.Destroy;
   EinObjekt := nil;   Das Objekt in der Liste geht auch verloren!}

   EinObjekt := TObject.Create();
   EinObjekt.Name := '2';
   Objektliste.Add(EinObjekt);
Bei dem Code ist so in dieser Form erstmal kein Fehler drin (wenn man davon absieht, dass TObject keine Property Name hat), du kannst ohne Probleme sowas aufbauen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  LObjectList: TObjectList;
  LObject: TObject;
begin
  LObjectList := TObjectList.Create(True);
  try
    for i := 0 to 9 do
    begin
      LObject := TObject.Create();
      LObject.Name := 'foo';
      LObjectList.Add(LObject);
    end;
  finally
    LObjectList.Free;
  end;
end;
Bei TObjectList.Create wird der Parameter True übergeben, welcher bedeutet, dass beim freigeben der Objectliste auch alle dahinter liegenden Objecte mit freigegeben werden. Solltest du den parameterlosen Constructor aufrufen, geschieht dies ebenso.
Wenn du Instanzen von Objekten übergibst, übergibst du eigentlich nie das Objekt selber, sondern nur die Referenz auf die Speicheradresse wo das Objekt liegt. Daraus folgt, dass in der LObjectList und im LObject nur Zeiger auf ein und das selbe Objekt sind. Wenn du jetzt über einen dieser Zeiger das Objekt freigibst, dann zeigt die andere Referenz immer noch dahin, beim Aufrufen wirst du dort aber kein Objekt mehr finden.
  Mit Zitat antworten Zitat