在第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.
我正在玩一些使用shared_ptr和enable_shared_from_this,而我遇到了一些我不太懂的东西.
在我的第一次尝试中,我构建了这样的东西:
class shared_test : std::enable_shared_from_this<shared_test> {
public:
void print(bool recursive) {
if (recursive) {
shared_from_this()->print(false);
}
std::cout << "printing" << std::endl;
}
};
Run Code Online (Sandbox Code Playgroud)
请注意,此类私有地扩展std :: enable_shared_from_this.这显然有很大的不同,因为执行这样的事情:
int main() {
auto t(std::make_shared<shared_test>());
t->print(true);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
抛出bad_weak_ptr异常.好像我从std :: enable_shared_from_this中将类定义更改为公开的,这就是find.
为什么,我在这里想念什么?并没有办法使它适用于私有继承,因为shared_test类的"外部世界"不需要知道它是否允许共享...(至少,如果你问我,还是我又想念一些东西?)
c++ shared-ptr private-inheritance c++11 enable-shared-from-this