Mal ein schnelles Beispiel:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
List: TObjectList;
Button: TButton;
begin
List := TObjectList.Create;
try
Button := TButton.Create(nil);
List.Add(Button);
Button.Free;
ShowMessage(IntToStr(List.Count)); // = 1
finally
List.Free; //Bumm
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
List: TComponentList;
Button: TButton;
begin
List := TComponentList.Create;
try
Button := TButton.Create(nil);
List.Add(Button);
Button.Free;
ShowMessage(IntToStr(List.Count)); // = 0
finally
List.Free; //Alles in Butter
end;
end;
Eine TComponentList bekommt es mit, wenn ein Element "von außen" freigegeben wird, und aktualisiert sich dann. Bei der TObjectList ist das nicht so, das Ergebnis sind in dem Fall Dangling Pointer ("wilde Zeiger").