gpt4 book ai didi

delphi - 清除 TList 或 TObjectList

转载 作者:行者123 更新时间:2023-12-03 14:36:10 39 4
gpt4 key购买 nike

我对使用什么来存储列表中的对象有点困惑。到目前为止,我已经使用了 TList 并释放了循环中的每个项目。然后我发现 TObjectList 可以从 Free 自动执行此操作。然后我从 TList.Clear 的文档中看到了这一点:

Call Clear to empty the Items array and set the Count to 0. Clear also frees the memory used to store the Items array and sets the Capacity to 0.

所以基本上是一样的。所以

对于TList

mylist.Clear;
myList.Free;

TObjectList相同吗?

myList.Free;

TObjectList 只能用于作为类的项目还是可以存储记录?

最佳答案

<强>1。无论使用 ClearFree,TList 都不会释放元素。

aList.Clear;

只会设置 aList.Count := 0 而不释放 aList.Items[] 元素。所以你会泄漏内存。您需要这样的显式免费:

for i := 0 to aList.Count-1 do
TObject(aList[i]).Free;

但这就是TObjectList 的作用...:)

关于TObjectList,值得一提的是TObjectList.Destroy正在调用Clear

所以

aObjectList.Clear;
aObjectList.Free;

完全相同
aObjectList.Free;

<强>2。要存储记录列表,您可以使用动态数组。

您将通过我们的 dynamic array wrapper 获得所有 TList 方法(以及更多) 。即添加/删除/清除/计数/IndexOf/查找...

它具有内置的序列化功能(二进制或 JSON)、自动排序和比较(使用 RTTI),这些功能是 TList/TObjectList 所不具备的。从 Delphi 5 及更高版本开始。

在更现代的 Delphi 版本中,如果您不想使用第三方库,您可以使用泛型来处理动态数组。

关于delphi - 清除 TList 或 TObjectList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10410019/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com