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 :-(

Before I file an bug report: Can somebody confirm this bug?

DoDi


--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to