use*_*926 15 c++ shared-ptr private-inheritance c++11 enable-shared-from-this
我正在玩一些使用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类的"外部世界"不需要知道它是否允许共享...(至少,如果你问我,还是我又想念一些东西?)
Ale*_*nov 12
为什么,我在这里想念什么?
要使shared_from_this工作enable_shared_from_this必须知道shared_ptr哪个班级.在您的STL实现中weak_ptr,通过其他实现是可能的.当您私下继承时,则无法从类外部访问基类的属性.实际上甚至不可能理解你继承了.因此make_shared生成通常的shared_ptr初始化而不设置适当的字段enable_shared_from_this.
异常不是从make_shared形式抛出,shared_from_this因为enable_shared_from_this没有正确初始化.
并没有一种方法可以使它适用于私有继承,因为shared_test类的"外部世界"不需要知道它正在启用此共享...
不可以.外界必须知道该对象与shared_ptr有特殊关系才能正常工作.
是不是有办法使它适用于私有继承,因为shared_test类的"外部世界"不需要知道它是从这个开始共享
shared_ptr本身就是"外部世界"的一部分; 该shared_ptr构造需要能够访问enable_shared_from_this的基类子对象的shared_test对象时,它指向,以初始化私有weak_ptr的成员enable_shared_from_this执行.
| 归档时间: |
|
| 查看次数: |
1719 次 |
| 最近记录: |