我是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};
这种编程模式的“最佳实践”是什么?
最佳答案
使用TObjectList<T>
代替TList<T>
。
默认情况下,TObjectList<T>
将在您从列表中删除对象时将其释放,而在释放对象列表本身时将释放所有对象。这由构造函数的OwnsObjects
参数控制,默认情况下为True
。