我正在用C ++学习8年以上的D.我的问题是关于D垃圾收集 - 我什么时候使用删除,什么时候不需要?
答案 0 :(得分:14)
你没有。删除不能与D版本2一起使用,并且打算从该语言中删除。我不确定是什么。相反,您使用函数destroy(对象),它调用析构函数,您可以在其中释放非GC内存的资源。在GC收集对象自己的内存期间,将再次引发析构函数。这在“The D Programming Language”中有解释。
我们的想法是早于GC提供的资源回收资源,并防止因悬空指针造成的内存损坏。为了不那么安全,core.memory模块提供GC.free(对象),可以在调用destroy(object)之后释放内存。
由于我不是C ++程序员,我真的不知道RAII模式,但如果你想避免使用GC,这个和引用计数是预期的策略。
答案 1 :(得分:10)
在D文档中查看Garbage Collection。如上所述,(几乎)从不需要明确管理内存。当然,在花了一些子弹点来试图说服你的GC的力量之后,它们包括一些垃圾收集不足的场景。为了解决这些短缺问题(他们称之为约束),Digital Mars提供了Memory Management的提示。
如果可能,让D垃圾收集器做它的事情。忽略显式内存管理。在一些非常具体的情况下,可能会出现无法接收的不可接受的GC暂停或内存。如果您的应用程序包含其中一种方案(测试和配置文件以证明它),请隔离问题的原因并在必要时明确管理内存。 D让你以乐观主义者的身份开始。如果事情没有完美解决,那么可以放心,你可以依靠明确的内存管理。