在Delphi中分配和取消分配动态列表的最佳方法?

时间:2013-02-15 09:46:05

标签: delphi dynamic-memory-allocation tlist

我是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};

这种编程模式的“最佳实践”是什么?

1 个答案:

答案 0 :(得分:9)

使用TObjectList<T>代替TList<T>

默认情况下,TObjectList<T>会在您从列表中删除对象时释放该对象,或者在释放对象列表本身时释放所有对象。这由构造函数的OwnsObjects参数控制,默认情况下为True