我为具有以下控制块结构的类启用了简单的共享所有权
template <class C>
struct Ptr
{
C* value_ ;
size_t ref_ ;
IdType id_ ;
};
Ptr<Payload>* ptr_ ;
value_
是具有共享所有权的有效负载,
id_
是将值链接到数据库行的数据库ID。它可以存在或不存在有效载荷,这就是为什么它不是有效载荷的一部分而是控制块的一部分,
ref_
是参考计数器。
以下功能允许取得所有权并释放它:
template<class C>
void ptr<C>::free()
{
if(ptr_)
{
ptr_->ref_-- ;
if(ptr_->ref_==0)
{
delete ptr_->value_ ;
delete ptr_ ;
ptr_ = nullptr ;
}
}
}
template<class C>
void ptr<C>::take()
{
if(ptr_)
ptr_->ref_++ ;
}
这很有效,但我需要更进一步,因为它不能满足我的需求:
shared_ptr
标准,因为我的控制块不是线程安全的,我的所有权操作不是原子的我对所有权行为的需求已经被C ++ 11智能指针所涵盖,但它们并不是为了继承而设计的,并且无法自定义控制块。
我试图了解如何使用boost和标准库来处理原子性,但现在这是相对神秘的。
所以问题很简单,Boost或STL是否有办法在对象核心设计中实现共享所有权支持,并通过这种方式符合C ++标准?