首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi中的垃圾回收

Delphi中的垃圾回收
EN

Stack Overflow用户
提问于 2010-12-14 23:36:29
回答 6查看 11.2K关注 0票数 18
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-12-14 23:41:18

简单的回答是不。

Delphi不是一种完整的垃圾收集语言,用户定义的类型应该手动分配和释放。它只为一些内置类型提供自动收集,如字符串、动态数组和接口,以便于使用。

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

票数 26
EN

Stack Overflow用户

发布于 2010-12-15 01:33:13

是的,确实如此。

Delphi Win32不包括开箱即用的垃圾收集器,所以这个问题的其他答案在技术上是正确的。然而,这并不意味着它是不可能的,或者它还不存在。多亏了Delphi的可替换内存管理器,Barry Kelly在2004年为Boehm garbage collector实现了一个全功能的wrapper

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

虽然我没有听说过任何项目尝试这样做,但是没有什么能阻止人们包装或移植更高级的gc。

票数 21
EN

Stack Overflow用户

发布于 2010-12-14 23:42:50

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

如果使用原生Delphi,那么最接近垃圾收集的是各种引用计数的类型,包括字符串、接口、变体和动态数组。当你的程序确定它们不再被使用时,这些类型将被自动清除,但它通过在这些对象进入和离开当前作用域时保持引用计数来做到这一点。您还拥有所有权的概念,它将在所有者被销毁时销毁所拥有的组件。

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

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4440841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档