首页  >  文章  >  后端开发  >  为什么不能在构造函数中使用“shared_from_this”?

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

DDD
DDD原创
2024-11-06 06:14:02641浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn