Eigentlich hielt ich dies für selbstverständlich:
TList verwaltet Zeiger und keine Objekte. Delete = Pointer aus der Liste löschen;
TObjectList verwaltet Objekte (schlagt mich bitte nicht!
). Bedeutet wenn
OwnsObject = true;
, dann Delete = Objekt freigeben und Pointer löschen (Das Objekt gehört ja der Liste, wie der Name schon sagt
)
Ich fange gleich an, zu heulen.
Du hast ja so Recht. Und ich wieder einmal viel zu kurz geschaut.
Delphi-Quellcode:
procedure TObjectList<T>.Notify(const Value: T; Action: TCollectionNotification);
begin
inherited;
if OwnsObjects and (Action = cnRemoved) then
Value.Free;
end;
TObjectList gibt also wirklich den Wert frei!
Kann mir BITTE mal jemand sagen, wie ich so blöd sein konnte, das zu übersehen?
Ich ziehe somit die Frage zurück und behaupte das Gegenteil.