我正在尝试使用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.pn.pi != third.pn.pi,first.px = third.px。也就是说,它们共享相同的对象,但它们使用不同的计数器。我怎样才能让这两个人共享同一个计数器?
发布于 2010-10-05 20:45:42
事实证明,这是因为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.这在retrospect中是有意义的,但文档确实应该更明确:)
对于这个误导性的问题,我很抱歉。
https://stackoverflow.com/questions/3861374
复制相似问题