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.