1. Technology

Freeing Objects in Delphi's TStrings Items

Generic FreeObjects for TStrings

By

The TListBox or TComboBox expose the Items property, of type TStringList, where each string item can be associated with an object.

The TStringList class implements the abstract properties and methods introduced by TStrings.

The TStrings object does not own the objects you add this way. Objects added to the TStrings object still exist even if the TStrings instance is destroyed. Objects must be explicitly destroyed by the application / developer - you. If not, your application will leak memory.

Here are a few examples of storing objects along with strings in a TStringList.

Generic "FreeObjects" for TStrings Descendants

Here's a generic solution to freeing the memory used by objects stored along strings in a TStrings descendant.

procedure FreeObjects(const strings: TStrings) ;
var
  idx : integer;
begin
  for idx := 0 to Pred(strings.Count) do
  begin
    strings.Objects[idx].Free;
    strings.Objects[idx] := nil;
  end;
end;
Usage examples:

FreeObjects(ComboBox1.Items);

FreeObjects(ListBox1.Items);
Note: if objects were not added to items, nothing bad with happen if you call the FreeObjects procedure.

Note: Delphi 2009 (and later versions) implementation of the TStringList class exposes the OwnsObjects property. When OwnsObjects is true, objects associated with strings will be freed by the TStringList when items/strings are removed (deleted) from the list.

Delphi tips navigator:
» Changing the Title of a Print Dialog in Delphi - Specifing TPrintDialog's Caption
« Disconnect a Network Drive from Delphi - Programmatically Remove a Network Connection

©2014 About.com. All rights reserved.