由于我需要在项目中使用特殊的引用计数机制(并不总是公开指针),我想在基本引用计数之上实现我的对象处理。
libstdc ++ 和 libc ++ 都使用类std::__shared_count
进行基本(非特定类型)引用计数。
在查看 boost 时,他们也有一个boost::detail::shared_count
类。
我现在将我的尝试基于boost::detail::shared_count
,但我犹豫不决,因为它已经在过去的 boost 版本中进行了更改。是否有其他基本的引用计数机制可供使用?
答案 0 :(得分:1)
您可以将boost::shared_ptr
与自定义删除器一起使用,如果您需要明确知道计数,则您将拥有use_count
成员函数,并且自定义删除器会自动充当回调函数计数达到0。
这种技术的真正优势在于它是可移植的并且可能经过良好测试,更不用说计数器堆分配管理和线程同步已经完成了。
答案 1 :(得分:1)
如果您不需要弱指针,则无需将引用计数用于引用计数。
首先尝试boost::intrusive_ptr
(您需要实施intrusive_ptr_add_ref
和intrusive_ptr_release
。)
否则,只需使用自定义删除器,即可免费回家。
struct my_delete {
void operator()(MyClass* p) const {p->Release();}
};