我目前正在使用引用计数技术(在C++中)实现垃圾收集器。然而,存在一个主要问题,即如果数据存在循环引用,它们永远不会被收集,因为它们的引用计数始终为非零。
我尝试搜索并发现了这些称为追踪垃圾收集器、标记-清除算法等的东西。我能否实现其中之一?它们到底是如何工作的?
我目前正在使用引用计数技术(在C++中)实现垃圾收集器。然而,存在一个主要问题,即如果数据存在循环引用,它们永远不会被收集,因为它们的引用计数始终为非零。
我尝试搜索并发现了这些称为追踪垃圾收集器、标记-清除算法等的东西。我能否实现其中之一?它们到底是如何工作的?
如果您出于教育目的编写垃圾回收器,我建议您考虑编写另一种语言(没有直接访问指针的语言)的解释器。如果您想在生产软件中使用C++编写垃圾回收器,我强烈建议您使用现有的高质量生产实现。
http://www.boost.org/doc/libs/1_48_0/libs/smart_ptr/weak_ptr.htm
weak_ptr类模板存储对已由shared_ptr管理的对象的“弱引用”。要访问对象,可以使用shared_ptr构造函数或成员函数lock将weak_ptr转换为shared_ptr。当指向该对象的最后一个shared_ptr消失并且删除对象时,尝试从引用已删除对象的weak_ptr实例获取shared_ptr将失败:构造函数将抛出类型为boost :: bad_weak_ptr的异常,而weak_ptr :: lock将返回一个空shared_ptr。