了解构造函数中 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中文网其他相关文章!