On Sun, 5 Feb 2012, Hans-Peter Diettrich wrote:
I wondered why my objects were not destroyed, and I think that I found an bug
in TStringList.Destroy:
destructor TStringList.Destroy;
Var I : Longint;
begin
FOnChange:=Nil;
FOnChanging:=Nil;
// This will force a dereference. Can be done better...
For I:=0 to FCount-1 do
FList^[I].FString:='';
FCount:=0;
SetCapacity(0); <-----------------------------
Inherited destroy;
end;
I could not find anywhere instructions to free the objects, not in the
destructor nor in SetCapacity. Clear() destroys the owned objects, but it
cannot do anything after SetCapacity(0). IMO Clear() should be called,
instead of the attempts to clear the list in an more efficient(?) way.
I suspect that the destructor was copied from Delphi, and was not updated
when OwnsObjects was added :-(
We do not copy code from Delphi. For one, because it's not allowed to copy
and distribute copyrighted code.
Anyway; the bug is confirmed, and fixed in rev. 20265.
Michael.
--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus