我正在尝试使用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.px
但first.pn.pi!=third.pn.pi
。也就是说,它们都共享相同的对象,但它们使用不同的计数器。我怎样才能让两人分享同一个柜台?
答案 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.
回想起来有意义,但文档应该更明确: )
对这个误导性问题感到抱歉。