[lazarus] Order of destruction in TCustomListBox

Mattias Gaertner nc-gaertnma at netcologne.de
Fri Dec 12 11:42:19 EST 2003


On Fri, 12 Dec 2003 17:02:56 +0100  Vincent Snijders <vslist at zonnet.nl>
wrote:

> Hi,
> 
> The destructor of TCustomListBox is:
> destructor TCustomListBox.Destroy;
> begin
>   FreeAndNil(FCanvas);
>   inherited Destroy;
>   FreeAndNil(FItems);
> end;
> 
> As I am implementing the TCheckListBox items collection for win32, I
> would like to access the listbox handle, while in the destructor of the
> items collection. Unfortunately the window (+ items + item data stored
> in it) are lost before the destructor for the items collection is
> called. 
> 
> Therefore I want to ask, if it is possible to change to destructor to:
> destructor TCustomListBox.Destroy;
> begin
>   FreeAndNil(FCanvas);
>   FreeAndNil(FItems);
>   inherited Destroy;
> end;
> 
> If this is not possible, I will probably find another way to close the
> checklistbox without memory leaks, but changing this is easier for me.

What about:

destructor TCustomListBox.Destroy;
begin
  Destroying;
  DestroyWnd;
  FreeAndNil(FCanvas);
  inherited Destroy;
  FreeAndNil(FItems);
end;

The Destroying; can accelerate the destruction and DestroyWnd will clean up.
Maybe such things should be added to more controls.

I think, we should keep fItems like the VCL until after the "inherited
Destroy;".


Mattias






More information about the Lazarus mailing list