我想复制一个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。
答案 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));