Shared_ptr压入vector失败.处理步骤
shared_ptr failed to be pushed to vector
我有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
}
更新:这似乎不是push的问题,但我使用了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
}
不知道为什么要使用boost库(不太熟悉它们),但是共享指针也在标准库内存中
#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
相关文章:
- QDateTime::toString() 在退出处理程序中使用时失败
- 为什么此代码导致未处理的异常失败
- 生成库失败:无法识别文件格式;作为链接器脚本处理
- 构造函数中的错误处理而不会失败
- 在 Mac 上C++编译代码时处理“dyld:惰性符号绑定失败:找不到符号”错误
- 错误 opencv 错误断言失败 (p [-1] <= 2) 是什么意思以及如何处理它?
- boost::async_connect 上的 ASIO 完成处理程序在第一次失败后再也没有调用过
- 如何处理失败的方法:通过使用异常或使方法返回bool
- 我该如何处理断言失败
- 如何处理PostMessage()失败
- 如何处理 RAII 的构造函数失败
- 处理失败的构造函数
- vHRESULT 中未处理的异常失败
- C++自做异常处理失败
- 失败错误处理问题
- 程序在Turbo C中运行良好,但在MSVC中失败,出现未处理的异常
- 如何预期static_assert失败并使用Boost.Test框架进行处理
- 预处理失败了
- IDirect3DDevice9::GetFrontBufferData失败,分割错误.处理步骤
- c++异常处理失败