Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
TStringList, владеющий объектами

В этом случае вам нужно освобождать объекты StringList точно также, как вы это делали без него. StringList.Free просто очистит список и строки, но не ассоциированные с ними объекты. Дело в том, что вы могли бы иметь указатели на объекты, например, в двух StringList, и вы могли бы захотеть освободить в одном список строк без освобождения объектов, содержащихся в другом.

Вы можете создать свой собственный класс, автоматизирующий процедуру освобождения объектов. Вот образец такого класса:


TOwnerStringList = class(TStringList)
private
  FOwnsObjects: Boolean;
public
  constructor Create(AOwnsObjects: Boolean); override;
  destructor Destroy; override;
end;

constructor TOwnerStringList.Create(AOwnsObjects: Boolean);
begin
  inherited Create;
  FOwnsObjects := AOwnsObjects;
end;

destructor TOwnerStringList.Destroy;
var
  I: Integer;
begin
  if FOwnsObjects then
    for I := 0 to MyStrLst.Count - 1 do
      TObject(Objects[I]).Free;
  inherited Destroy;
end;

Теперь, когда у вас есть взаимно-однозначное соответствие между списком строк и имеющимися объектами, то для создания нового списка, который уничтожал бы объекты при освобождении списка строк, вам необходимо выполнить команду: "MyStringList := TOwnerStringList.Create(True)". Для того, чтобы список вел себя как обычно, передавайте в методе Create в качестве параметра False, или просто используйте нормальный TStringList.

Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay