我有一个使用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。有什么问题?
答案 0 :(得分:0)
嗯,事实证明这是一个错误(不是我的...... 邪恶的微笑)在一个完全不同的地方。
PointPrism
类的成员被保存为const引用,这使得它们在创建它们的方法之外被删除...
谢谢大家的帮助。