Boost shared_from_this()返回错误的shared_ptr

时间:2010-10-05 06:46:22

标签: boost shared-ptr

我正在尝试使用boost :: shared_ptr和boost :: enable_shared_from_this无济于事。看起来好像shared_from_this()正在返回错误的shared_ptr。这就是我所看到的:

Task* task = new TaskSubClass();
boost::shared_ptr<Task> first = boost::shared_ptr<Task>(task); // use_count = 1, weak_count = 1
boost::shared_ptr<Task> second = first; // use_count = 2, weak_count = 1
boost::shared_ptr<Task> third = first->shared_from_this(); // use_count = 2, weak_count = 2

我还注意到first.px=third.pxfirst.pn.pi!=third.pn.pi。也就是说,它们都共享相同的对象,但它们使用不同的计数器。我怎样才能让两人分享同一个柜台?

1 个答案:

答案 0 :(得分:1)

事实证明,这是因为TaskSubClass的构造函数调用了一些方法,而该方法又调用了new boost::shared_ptr<Task>(this)而不是new boost::shared_ptr<Task>(shared_from_this())。作为一个额外的好处,you're not supposed to从构造函数中调用shared_from_this(),文档在这一点上远非显而易见:There must exist at least one shared_ptr instance p that owns t.回想起来有意义,但文档应该更明确: )

对这个误导性问题感到抱歉。