在Delphi中分配和释放动态列表的最佳方法是什么?

4

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

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

根据您的文件类型,我建议将TFileData定义为一个record,然后使用TList<TFileData>TDictionary<...,TFileData>或者只是array of TFileData - Arioch 'The
谢谢,我得研究一下记录的优缺点。目前我还是使用类。 - David
1个回答

9

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接