Yol*_*ola 31 c++ constructor shared-ptr
在第91页的"C++标准库 "一书中,我读过以下内容shared_from_this():
问题是,
shared_ptr卖场本身的私有成员Person的基类enable_shared_from_this<>,在最后的人的建设.
该书的相关代码片段是:
class Person : public std::enable_shared_from_this<Person> {
...
};
Run Code Online (Sandbox Code Playgroud)
我不明白这里有两件事:
shared_ptr存储自己?Person?我认为构造Person最终是由我编写的构造函数的最后一个语句.我知道还有weak_ptr尚未初始化的内容.
编辑:感谢Angew!shared_from_this将工作后,才第一次shared_ptr来Person创建.这shared_ptr将检查Person类是否继承enable_shared_from_this,如果是,则初始化其内部weak_ptr.
Rei*_*ica 42
原因很简单:在对象中X,enable_shared_from_this通过初始化隐藏weak_ptr的第shared_ptr一个指向对象的副本来工作X.但是,对于一个shared_ptr能够指向X,X必须已经存在(它必须已经构建).因此,构造,同时X运行时,尚无shared_ptr其enable_shared_from_this可以使用.
拿这段代码:
std::shared_ptr<Person> p(new Person());
Run Code Online (Sandbox Code Playgroud)
在p(shared_ptr甚至)的构造函数被调用之前,必须对其参数进行求值.那个论点就是表达new Person().因此,构造函数Person之前的运行构造函数p甚至已经开始 - 在有任何可以绑定的shared_ptr对象之前enable_shared_from_this.