我使用的是enable_shared_from_this<Base>
,然后从Base
继承。当试图在Derived
的构造函数(不是初始化程序列表)中使用shared_from_this()
时,出现异常。原来内部弱指针为空,并且根本不指向this
。这怎么会发生?我的另一个用例就是完美的。我甚至不知道从哪里开始。我低头看着enable_shared_from_this
的源代码,它看起来像那个指针总是为nullptr。enable_shared_from_this - 空内部弱指针?
16
A
回答
34
您不能在对象的构造函数中调用shared_from_this()
。 shared_from_this()
要求对象至少拥有一个shared_ptr
。一个物体在构建之前不能由shared_ptr
拥有。
我猜想当shared_ptr
第一次获得对象的所有权时,内部弱指针被设置。在那之前,弱指针可以引用没有引用计数结构。
5
对于enable_shared_from_this
模板本身,正如你观察显得无能为力,注意7的在this page底部的解释说明:
...模板
enable_shared_from_this
持有weak_ptr
对象指向 派生对象。有一个 鸡与鸡蛋问题,虽然,约 如何初始化weak_ptr
对象 时,没有对应的对象shared_ptr
对象。实施 诀窍是,对于shared_ptr
建设者了解enable_shared_from_this
,和建设 一个shared_ptr
对象拥有具有enable_shared_from_this
作为公共 基类 资源过程中设置的weak_ptr
对象。
1
概念,shared_from_this()
挑选一个shared_ptr
指向this
并返回它的一个副本。
在构造函数中,没有指向this
的shared_ptr
。
相关问题
- 1. 什么是强指针和弱指针
- 2. 弱引用或指针
- 3. 使用双向弱指针
- 4. 弱指针是零块
- 5. 使用get()弱指针unique_ptr
- 6. 块和弱指针块
- 7. 获取指向派生类的弱指针
- 8. 虚空指针的内存
- 9. 用指针内部的指针声明联合指针
- 10. 指向内部命名空间的成员函数的指针
- 11. 如何处理弱指针和强指针?
- 12. 弱点指针为什么不能访问底层指针?
- 13. 问题上enable_shared_from_this
- 14. 指针值C空指针
- 15. 弱/强参考指针关系
- 16. 如何序列化共享/弱指针?
- 17. 空指针与悬空指针
- 18. 头部指针指针
- 19. 铸造空指针结构指针不返回内部结构正确的指针
- 20. 指针内指针的指针
- 21. getMetaData()抛出内部的空指针异常
- 22. @Component内部的自动服务返回空指针异常
- 23. 从内部类访问变量 - 获取空指针异常
- 24. 空指针
- 25. C++ - 空指针
- 26. AdView空指针
- 27. String.valueOf()空指针
- 28. Android空指针
- 29. 空指针4
- 30. Deferencing空指针
不是重复的:http://stackoverflow.com/questions/4428023/enable-shared-from-this-c0x-what-am-i-doing-wrong – 2010-12-20 23:07:55