Bha*_*rat 24

答案简单

Delphi不是一种完整的垃圾收集语言,应手动分配和取消分配用户定义的类型.它仅为少数内置类型提供自动收集,例如字符串,动态数组和界面,以便于使用.

但是您可以在某种程度上使用使用引用计数进行垃圾收集的接口.

  • 另外值得一提的是,从TComponent派生的任何内容都通过构造函数获取所有者指针,这会导致对象与其所有者一起被销毁. (7认同)

Ken*_*ran 19

是的,它确实.

Delphi Win32不包含开箱即用的垃圾收集器,因此这个问题的其他答案在技术上是正确的.但是,这并不意味着它不可能或者不存在.感谢Delphi的可替换内存管理器,Barry Kelly在2004年为Boehm垃圾收集器实现了一个功能齐全的包装.

它包括演示其使用的示例代码(基本上创建未分配的对象并观看GC咀嚼它们).有比Boehm GC更先进的GC,但这清楚地证明了它的可能性,它几乎可以透明地使用.您只需将gc单元添加到项目的uses子句的开头即可.

虽然我没有听说有任何项目尝试它,但没有什么能阻止某人包装或移植更高级的gc.


Rob*_*edy 7

在通常意义上的垃圾收集中,运行时检测未引用的对象并销毁它们或以其他方式回收未使用的资源,不,Delphi没有垃圾收集.

如果您使用本机Win32 Delphi,那么您最接近垃圾收集的是各种引用计数类型,包括字符串,接口,变体和动态数组.当程序确定它们不再被使用时,这些类型将自动清理,但它通过保持引用计数,因为这些对象进入和离开当前范围.您还拥有所有权的概念,这将在所有者被销毁时销毁所拥有的组件.

如果您使用Delphi for .Net,那么您隐式拥有底层运行时的垃圾收集.

  • 是的,@用户,因为Delphi 7已经十年了,它也必须已经死了.此外,Delphi语言继续通过Prism可用于.Net. (5认同)
  • 棱镜甚至没有尝试共享源,所以我并不认为这是一个延续.除商标外. (3认同)
  • Delphi.NET已经死了超过2年 (2认同)