我需要释放列表中的元素吗?

5

你好,我有一个类型为 TList 的列表。我将它填充了使用 new 创建的指向记录的指针。

我的其中一位同事告诉我,释放该列表将会释放所有元素,但是我对此表示怀疑,因为我习惯于 C。那么 Delphi 7 是否具有某种垃圾回收功能,我真的不需要释放每个元素吗?有人可以解释一下这是如何工作的吗?


一个TList来保存记录?为什么不直接用数组呢?这样你就不需要New和Dispose的开销了,只需要SetLength,ét voila。 - NGLN
@NGLN 因为它的大小必须在运行时确定。 - Earlz
3
Delphi从版本4开始支持动态数组。您可以在运行时设置其大小。它与C数组不同(尽管最近十年来,甚至C数组也可以在运行时确定大小)。 - Rob Kennedy
1个回答

14

TList保存指针,但它不拥有指向的内容。这是因为它不知道您如何分配它们,所以也无法知道如何释放它们。如果这些内容需要被销毁,您需要自己销毁。

你的同事可能在想TObjectList,它可以选择拥有列表中的内容。


由于此问题中的TList保存了记录指针,因此重要的是调用Dispose并传递与New分配时相同类型的指针 - 如果分配的记录包含编译器管理的类型,例如长字符串和动态数组。 - Igor

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