复制boost :: shared_ptr的内容 - 有没有办法?

时间:2014-03-06 15:11:03

标签: c++ boost shared-ptr

我想复制一个boost :: shared_ptr的内容我正在进入一个函数

void virtual Add(const T_Value& value)
    {           
        push_back(value);
        if (_limit != -1 && int(size()) > _limit)
            erase(begin());//,begin() + (_limit >> 1));
    }

T_Value为boost::shared_ptr<ValueType>

我的问题是,使用这种方法,显然,value的use_count会增加,因为它现在在std :: list中有另一个引用,这个函数是其中的一部分。

然而,我想做的只是将value的内容复制到新的shared_ptr中,一个带有新计数的内容,并将其插入列表中。

因此,函数末尾的use_count(离开范围)将保留value的{​​{1}}的原始use_count;以及将要插入列表的新shared_ptr的use_count为1。

1 个答案:

答案 0 :(得分:4)

您可以使用make_shared克隆共享指针:

push_back(boost::make_shared<decltype(*value)>(*value));

在C ++ 03上:

push_back(boost::make_shared<typename T_Value::element_type>(*value));