Delphi是否有垃圾回收功能(https://en.wikipedia.org/wiki/Garbage(computer_science%29)?
发布于 2010-12-14 23:41:18
简单的回答是不。
Delphi不是一种完整的垃圾收集语言,用户定义的类型应该手动分配和释放。它只为一些内置类型提供自动收集,如字符串、动态数组和接口,以便于使用。
但是在某种程度上,您可以使用使用引用计数进行垃圾收集的接口。
发布于 2010-12-15 01:33:13
是的,确实如此。
Delphi Win32不包括开箱即用的垃圾收集器,所以这个问题的其他答案在技术上是正确的。然而,这并不意味着它是不可能的,或者它还不存在。多亏了Delphi的可替换内存管理器,Barry Kelly在2004年为Boehm garbage collector实现了一个全功能的wrapper。
它包括演示其使用的示例代码(基本上是创建未分配的对象并观察GC对它们的处理)。有比Boehm更高级的GC,但这清楚地证明了它的可能性,而且它可以几乎透明地使用。只需将gc单元添加到项目的uses子句的开头即可。
虽然我没有听说过任何项目尝试这样做,但是没有什么能阻止人们包装或移植更高级的gc。
发布于 2010-12-14 23:42:50
在垃圾收集的通常意义上,运行时检测未引用的对象并销毁它们,或者以其他方式回收未使用的资源,不,Delphi没有垃圾收集。
如果使用原生Delphi,那么最接近垃圾收集的是各种引用计数的类型,包括字符串、接口、变体和动态数组。当你的程序确定它们不再被使用时,这些类型将被自动清除,但它通过在这些对象进入和离开当前作用域时保持引用计数来做到这一点。您还拥有所有权的概念,它将在所有者被销毁时销毁所拥有的组件。
如果您使用Delphi for .Net,那么您就隐式地拥有了底层运行时的垃圾回收。
https://stackoverflow.com/questions/4440841
复制相似问题