boost :: shared_ptr在某处被删除

时间:2014-04-16 16:55:05

标签: c++ boost shared-ptr

我有一个使用boost :: shared_ptr的简单类结构。

看起来像 -

点类:

boost::shared_ptr<PointPrism> getPrismFromDirection(const Point3& direction) const
{
    return boost::shared_ptr<PointPrism>(new PointPrism(_position, direction));
}

boost::shared_ptr<PointPrism> getPrismFromAimingPoint(const Point3& aimingPoint)
{
    boost::shared_ptr<PointPrism> prism = getPrismFromDirection((aimingPoint - _position).normalized());
    prism->setAimingPoint(aimingPoint);
    return prism;
}    

主要课程:

main()
{
    boost::shared_ptr<Point> p; //initialized somewhere in this code
    boost::shared_ptr<PointPrism> prism = p->getPrismFromAimingPoint(aimingPoint);

    //here it looks like the prism object is just fine
    boost::this_thread::sleep(boost::posix_time::seconds(10));
    //here both VS10 debugger and log prints show that values inside prism are corrupted
}

据我所知,这意味着在代码中的某处,shared_ptr引用计数被搞砸并且析构函数被调用,但我无法弄清楚在哪里。 有什么想法吗?

编辑1:

当在VS10中按Alt + Shift + F11(显示将要调用的所有函数)时在return prism;处断行时,我看到boost :: shared_ptr ctor和boost :: shared_ptr dtor ,(我认为)意味着我以错误的方式返回shared_ptr。有什么问题?

1 个答案:

答案 0 :(得分:0)

嗯,事实证明这是一个错误(不是我的...... 邪恶的微笑)在一个完全不同的地方。 PointPrism类的成员被保存为const引用,这使得它们在创建它们的方法之外被删除... 谢谢大家的帮助。