Einzelnen Beitrag anzeigen

Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.387 Beiträge
 
Delphi 12 Athens
 
#4

AW: Fragen zu Generic TList

  Alt 26. Jan 2017, 08:56
Moin...
Du macht es dir schwerer als es in Wirklichkeit ist. Bei deinen 2 Listen gibt es einiges zu beachten.
1. Eine Masterlist die die Werte hällt und die Werte freigibt. (TObjectList)
2. Die Liste mit den kopierten Werten hällt. (TList) Diese Liste hällt nur die Pointer der Values aus der Masterliste.
3. Die Einträge können direkt mit TList.Delete aus der Liste entfernt werden. Das Original bleibt davon unberührt.

Delphi-Quellcode:
for i := 0 to 50 do
  begin
    Values := TMyClass.Create; // ein Pointer wird erzeugt
    Values.Counter := i;
    Values.Value := random(200);
    MyList.Add(Values); // ein Pointer liegt in der Liste und wird mit TList [B]nicht[/B] freigegeben
  end;
...wie ich auch in dem anderen Thread sagte, du solltest die TObjectList benutzen.
Delphi-Quellcode:
for i := 0 to MyList.Count - 1 do
  begin
    Values := MyList.Items[i];
    MyCopyList.Add(Values);
  end;
...das Legen in die MyCopyList legt nur den Pointer der Instanz aus der MasterList in die MyCopyList.
Delphi-Quellcode:
TMyList = class(TList<TMyClass>)
  private
    FFreeOnDelete: Boolean; // nicht notwendig da die Pointer in dieser Liste nicht freigegeben werden müssen
    procedure Notify(Ptr: Pointer; Action: TListNotification); virtual; // nicht notwendig da die Pointer in dieser Liste nicht freigegeben werden müssen
  public
    constructor Create(bValue: Boolean = true);
  end;
... die Freigabe der Values braucht hier nicht erfolgen. Das erledigt die MasterList über OwnsObjects.


Geändert von haentschman (26. Jan 2017 um 10:02 Uhr)
  Mit Zitat antworten Zitat