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

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

4

1 回答 1

9

使用TObjectList<T>而不是TList<T>.

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

于 2013-02-15T10:18:40.807 回答