首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Boost shared_from_this()返回错误的shared_ptr

Boost shared_from_this()返回错误的shared_ptr
EN

Stack Overflow用户
提问于 2010-10-05 14:46:22
回答 1查看 358关注 0票数 0

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

代码语言:javascript
复制
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.pifirst.px = third.px。也就是说,它们共享相同的对象,但它们使用不同的计数器。我怎样才能让这两个人共享同一个计数器?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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中是有意义的,但文档确实应该更明确:)

对于这个误导性的问题,我很抱歉。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3861374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档