Das Freigeben macht eine TObjectList von selber, wenn man es ihr sagt.
Delphi-Quellcode:
type
TSimpleObjectList<T: class> = class(TList<T>)
protected
procedure Notify(const Value: T; Action: TCollectionNotification); override;
public
function Add: T; overload;
function Insert(Index: Integer): T; overload;
end;
function TSimpleObjectList<T>.Add: T;
begin
Result := T.Create;
inherited Add(Result);
end;
function TSimpleObjectList<T>.Insert(Index: Integer): T;
begin
if (Index < 0) or (Index > Count) then
Items[Index];
Result := T.Create;
inherited Insert(Index, Result);
end;
procedure TSimpleObjectList<T>.Notify(const Value: T; Action: TCollectionNotification);
begin
try
inherited;
finally
if Action = cnRemoved then
Value.Free;
end;
end;
Nunja, eine kleine Erweiterung und schon läßt sich auch mit einer TObjectList<T> angenehm arbeiten.