shared-ptr - shared_ptr 断言像素!= 0 失败

标签 shared-ptr boost-thread

我有一个相当复杂的多线程应用程序(服务器),有时会由于断言而崩溃:

/usr/include/boost/smart_ptr/shared_ptr.hpp:418: T* boost::shared_ptr< <template-parameter-1-1> >::operator->() const [with T = msg::Player]: Assertion `px != 0' failed.

我一直无法查明原因,想知道这是 boost::shared_ptr 的问题还是我的问题?

我尝试了 g++ 4.4.3-4ubuntu5 和 llvm-g++ (GCC) 4.2.1 优化和不优化以及 libboost1.40-dev (= 1.40.0-4ubuntu4)。

最佳答案

使用boost::shared_ptr应该没有问题只要您正确初始化共享指针并为所有共享对象库使用相同的内存管理上下文。
在您的情况下,您正在尝试使用未初始化的共享指针。

boost::shared_ptr<Obj> obj;
obj->Something(); // assertion failed

boost::shared_ptr<Obj> obj(new Obj);
obj->Something(); // ok
我建议尽可能在声明时对它们进行初始化。异常处理可以为代码运行创建许多“不可见”的路径,并且可能很难识别未初始化的共享指针。
PS:如果您加载/卸载模块,还有其他问题 shared_ptr正在使用导致困惑。这很难解决,但在这种情况下,您将有一个非零指针。这不是你现在正在发生的事情。
PPS:使用的模式称为 RAII (Resource Acquisition Is Initialization)

关于shared-ptr - shared_ptr 断言像素!= 0 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3541179/

相关文章:

c++ - 使用shared_ptr来获得唯一的所有权(某种程度)——这是一个好的做法吗?

c++ - shared_ptr with map(错误error C2664)

c++ - std::enable_shared_from_this;公共(public)与私有(private)

c++ - 并行验证谓词,一旦线程池中的线程返回 true 就返回

linux - "Compiler threading support is not turned on."

c++ - Boost线程 - 通过引用传递参数

c++ - 如何将boost线程(源文件)集成到我自己的项目中

c++ - const 正确性和 shared_ptr,设计问题?

c++ - 亚信 : usage of self shared pointer in the examples

c++ - 如何使用 boost::future 重新抛出 std::exception_ptr 存储的原始异常?