Лучший способ выделить и освободить динамический список в Delphi?

Я новичок в Delphi и пытаюсь понять, как справиться с управлением памятью. У меня есть класс TFileData, который динамически распределяется и помещается в список. Каждый раз, когда я перезагружаю данные из файлов, мне нужно освободить старые объекты и выделить новые.

Для выделения я использую эту функцию:

function TImportXmlForm.GetLanguageFileData: TList<TFileData>;
begin
  if FAllFiles = nil then
    FAllFiles := TList<TFileData>.Create;
  Result := FAllFiles;
end{function};

Чтобы освободить:

if Assigned(FAllFiles) then
begin
  while FAllFiles.Count > 0 do
  begin
    FAllFiles.Items[0].Free;
    FAllFiles.Delete(0);
  end;
  FAllFiles.Free;
  FAllFiles := nil;
end{if};

Какова «лучшая практика» для такого рода шаблонов программирования?


person David    schedule 15.02.2013    source источник
comment
в зависимости от того, какой у вас файл, я бы подумал о том, чтобы сделать TFileData record, а затем использовать TList<TFileData>, TDictionary<...,TFileData> или просто array of TFileData   -  person Arioch 'The    schedule 15.02.2013
comment
Спасибо, в конце концов мне придется изучить плюсы и минусы записей. Пока я использую классы.   -  person David    schedule 18.02.2013


Ответы (1)


Используйте TObjectList<T> вместо TList<T>.

По умолчанию TObjectList<T> освобождает объект, когда вы удаляете его из списка, или все объекты, когда вы освобождаете сам список объектов. Это контролируется параметром OwnsObjects конструктора, который по умолчанию равен True.

person whosrdaddy    schedule 15.02.2013