虽然我认为我了解问题的要点(例如,良好的GC可以跟踪对象,而不是作用域),但我对这个主题的了解还不足以说服他人。

您能给我一个解释,为什么不存在带有确定性析构函数的垃圾回收语言吗?

最佳答案

它们不是互斥的。随意将C++与libgc(Boehm-Reiser-Detlefs收集器)一起使用。您仍然可以使用RAII,智能指针和手动删除,但是在运行GC的同时,您也可以“忘记”删除某些对象。

@Andy关于资源配置得太晚的答案错过了重点:在语义上至关重要的不是延迟释放资源,而是释放的顺序。

GC往往无法很好地订购产品,原因是它需要根据订购要求(依赖项)进行拓扑排序,并且这是一种昂贵的算法。

但是,Ocaml GC具有有趣的功能,您可以在其中将终结器附加到对象。如果对象变得不可访问,则终结器将运行,但是不会删除该对象(因为终结器可以使其再次可达:在这种情况下,您甚至可以附加另一个终结器)。这些终结器可以提供对订购的一些控制。

09-10 05:54
查看更多