Das was du da machst ist irgendwie völlig sinnentleert.
Wenn ich eine ObjectList habe und setze OwnsObjects auf True, dann signalisiere ich: Ja, diese Liste kümmert sich irgendwann um das Entfernen aus dem Speicher.
Ist OwnsObjects auf False, dann heißt das, das die Objekte hier zwar aufgeführt werden, aber jemand anders kümmert sich um das Freigeben.
Was du hier machst, ist einen Designfehler in deiner Anwendung zu beheben und kann auch zu einem Zugriffsfehler führen.
Delphi-Quellcode:
OList1 := TObjectList.Create( True );
OList2 := TObjectList.Create( False );
Obj := TFooObj.Create;
OList1.Add( Obj );
OList2.Add( Obj );
for Obj in OList do
begin
OList2.Remove( Obj );
if not OList2.OwnsObjects then
Obj.Free; // Jetzt rummst es, da das Objekt OList1 gehört
end;
Und hierzu
for I := List.Count - 1 downto 0 do begin
sei folgendes gesagt:
Der Compiler entscheidet ob vorwärts oder rückwärts gezählt wird, somit kann auch dieses hier in die Hose gehen