首页 > 后端开发 > C++ > 正文

为什么不能在构造函数中使用'shared_from_this”?

DDD
发布: 2024-11-06 06:14:02
原创
640 人浏览过

Why Can't You Use `shared_from_this` in a Constructor?

了解构造函数中 Shared_from_this 的无法使用

查询重点关注在类构造函数中使用 Shared_from_this 的限制。为了解决这个问题,让我们探讨一下这个限制背后的技术原因。

Shared_ptr 的隐藏成员

Shared_from_this 是自引用的,依赖于添加到enable_shared_from_this 基类。然而,这个weak_ptr只有在创建第一个shared_ptr到Person之后才会被设置。

构造时间线

类构造函数负责初始化其成员,包括构造enable_shared_from_this基类实例。在初始对象构造期间,还没有指向 Person 的shared_ptr。

Shared_ptr 和 Weak_ptr 之间的连接

考虑以下代码片段:

 std::shared_ptr<Person> p(new Person());
登录后复制

在调用 p(shared_ptr)的构造函数之前,必须对表达式 new Person() 求值,从而构建 Person 对象。由于shared_ptr的构造函数在创建Person对象之后运行,因此在Person的构造函数阶段,shared_ptr对象不存在,因此无法使用shared_from_this。

结论

技术上,shared_from_this在构造函数中不可用,因为初始化内部weak_ptr所需的shared_ptr在对象完全构造完成之前不存在。这会阻止shared_from_this建立必要的自引用连接。

以上是为什么不能在构造函数中使用'shared_from_this”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!