C++ 复制boost::shared_ptr的内容-有办法吗?

C++ 复制boost::shared_ptr的内容-有办法吗?,c++,boost,shared-ptr,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)); } 其

我想复制我在函数中得到的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_值为
boost::shared_ptr

我的问题是,显然,使用这种方法,
值的use\u计数会增加,因为它现在在这个函数所属的std::list中有另一个引用

然而,我想做的只是将
value
的内容复制到一个新的共享ptr中,一个具有新计数的ptr,然后将其插入列表中


因此,函数结束时(离开作用域)的使用计数将保持
值的原始使用计数
;将插入列表的新共享ptr的使用计数为1。

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

push_back(boost::make_shared<decltype(*value)>(*value));
push_back(boost::make_shared(*value));
在C++03上:

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

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

push_back(boost::make_shared<decltype(*value)>(*value));
push_back(boost::make_shared(*value));
在C++03上:

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

如果您的
ValueType
有一个复制构造函数,则使用现有值(最好通过
make\u shared
)构造一个
新的
值并在
shared\u ptr
中保留生成的指针。如果
ValueType
具有复制构造函数,则使用现有值(最好通过
make\u shared
)构造一个
新的
值并保留
共享的\u ptr
中的结果指针。这不会增加原始值的使用计数吗?@Cypher\u CS:No,它通过复制
*值创建一个新对象,并创建一个指向该值的新(当前未共享)指针。但是,如果指针指向基类,请注意切片。第二个指针指向基类了吗?但它给了我一个
错误C2664:'std::list::push_back':无法将参数1从'boost::shared_ptr'转换为'const boost::shared_ptr&'
出于某种原因,我无法访问元素类型。有什么想法吗?@ecatmur我遗漏了什么?这不会增加原始值的使用计数吗?@Cypher\u CS:没有,它通过复制
*值
,以及一个指向该值的新指针(当前未共享)来创建一个新对象。但是,如果指针指向基类,请注意切片。第二个指针指向基类了吗?但它给了我一个
错误C2664:'std::list::push_back':无法将参数1从'boost::shared_ptr'转换为'const boost::shared_ptr&'
出于某种原因,我无法访问元素类型。有什么想法吗?@ecatmur我错过了什么?