gpt4 book ai didi

c++ - 从技术角度来看,为什么 shared_from_this 不能在构造函数中使用?

转载 作者:IT老高 更新时间:2023-10-28 12:53:41 29 4
gpt4 key购买 nike

the book The C++ Standard Library在第 91 页,我读过这篇关于 shared_from_this() 的文章:

The problem is that shared_ptr stores itself in a private member of Person’s base class, enable_shared_from_this<>, at the end of the construction of the Person.

书中相关代码片段为:

class Person : public std::enable_shared_from_this<Person> {
...
};

这里有两点我不明白:

  1. 这是谁shared_ptr哪个商店自己?
  2. 如何在 Person 的构建结束时将自己存储在任何地方?我认为 Person 的构造以我编写的构造函数的最后一条语句结束。

我知道有weak_ptr尚未初始化。

编辑:感谢安吉! shared_from_this只有在第一个 shared_ptr 之后才能工作至Person被创建。这个shared_ptr将检查 Person继承自 enable_shared_from_this 的类,如果是,则初始化其内部 weak_ptr .

最佳答案

原因很简单:在对象 X 中,enable_shared_from_this 的工作原理是使用第一个 shared_ptr 的拷贝初始化隐藏的 weak_ptr 指向对象 X。然而,shared_ptr 能够指向 XX 必须已经存在(它必须已经被构造)。因此,当 X 的构造函数运行时,还没有 enable_shared_from_this 可以使用的 shared_ptr

获取这段代码:

std::shared_ptr<Person> p(new Person());

p(shared_ptr)的构造函数被调用之前,它的参数必须被计算。该参数是表达式 new Person()。因此,Person 的构造函数在 p 的构造函数开始之前运行——在 enable_shared_from_this< 有任何 shared_ptr 对象之前 可以绑定(bind)。

关于c++ - 从技术角度来看,为什么 shared_from_this 不能在构造函数中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31924396/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com