【问题标题】:Do I need to free elements of a list?我需要释放列表的元素吗?
【发布时间】:2011-10-19 19:48:43
【问题描述】:

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

我的一位同事告诉我释放列表将释放所有元素,但我有疑问,因为我习惯了 C。Delphi 7 也有某种垃圾收集,我真的不必释放每个元素?有人可以向我解释这是如何工作的吗?

【问题讨论】:

  • 保存记录的 TList?为什么不只是一个数组?那么你就没有NewDispose的开销;只是 SetLength,等等。
  • @NGLN 因为它的大小必须在运行时确定。
  • 厄尔兹,Delphi supports dynamic arrays as of version 4。您可以在运行时设置其大小。它不像 C 数组(尽管在过去十年左右的时间里,即使是 C 数组也能够在运行时确定它们的大小)。

标签: delphi memory-management pointers free delphi-7


【解决方案1】:

TList 拥有指针,但它不拥有它们所指向的东西。它不能,因为它不知道你是如何分配它们的,所以它也不知道如何释放它们。如果它们应该被销毁,您需要自己销毁这些物品。

您的同事可能正在考虑TObjectList,它可以选择拥有列表中的项目。

【讨论】:

  • 由于此问题中的 TList 包含指向记录的指针,因此调用 Dispose 传递与使用 New 分配的类型相同的指针很重要 - 如果分配的记录包含编译器管理的类型,例如长字符串和动态数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-08
  • 2012-01-22
  • 2013-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-13
相关资源
最近更新 更多