shared_ptr无法推送到向量

时间:2016-06-29 21:32:51

标签: c++ boost containers shared-ptr

我有boost shared_ptr的向量,但是,当我推送到本地创建的新shared_ptr的末尾时,它会失败。有人可以告诉我下面的代码有什么问题吗?

std::vector<boost::shared_ptr< A > > vecA;

BOOST_FOREACH(const std::string& s, vecStrings)
{
   boost::shared_ptr<A> pNewA = boost::make_shared<A>(s);
   pNewA->MyString(); //OK
   vecA.push_back(pNewA); //throw error Assertion `px != 0' failed
}

更新: 这似乎不是推送的问题,但我使用了对shared_ptr的引用。

 for(int i=0, n=vecA.size(); i <n; i++)
{

    //use pA
     boost::shared_ptr& pA = vecA[i];
     vecA.push_back(pA);
    //will core dump at the end of loop because pA changed due to vector enlarge
}

1 个答案:

答案 0 :(得分:-3)

不确定为什么你在那里使用boost库(不太熟悉它们)但共享指针也在标准的lib内存中

#include <memory>

最有可能的是共享指针对象的所有权问题。如果使用标准库编写,正确的代码将如下所示:

#include <vector>
#include <memory>

//...

std::vector<std::shared_pointer<A> > vecA;

//version 1
std::shared_ptr<A> pNewA = std::make_shared<A>(s);
pNewA->MyString();
vecA.push_back(std::move(pNewA)); //std::move moves ownership to vector

//or alternativeley
vecA.push_back(std::shared_pointer<A>(new class A(s)));

或沿着这些方向的东西..

HTH