C++ 为什么来自_this()的弱_总是返回空的弱指针?

C++ 为什么来自_this()的弱_总是返回空的弱指针?,c++,smart-pointers,C++,Smart Pointers,我正在尝试编写简单的父子类,并尝试使用智能指针 我听说在构造函数中使用this()中的shared\u不好,所以我把它放在connect()方法中。但是在这个方法中,当我从_this()调用弱_时,它返回空的弱指针 我不知道我做错了什么,请帮忙:) #包括 #包括 #包括 #包括 使用名称空间std; 类基:受保护的启用\u共享\u{ 公众: 弱ptr亲本; 虚拟void connect(){} 虚拟void replaceChild(共享\u ptr oldChild,共享\u ptr new

我正在尝试编写简单的父子类,并尝试使用智能指针

我听说在构造函数中使用this()中的
shared\u不好,所以我把它放在
connect()
方法中。但是在这个方法中,当我从_this()
调用
弱_时,它返回空的弱指针

我不知道我做错了什么,请帮忙:)

#包括
#包括
#包括
#包括
使用名称空间std;
类基:受保护的启用\u共享\u{
公众:
弱ptr亲本;
虚拟void connect(){}
虚拟void replaceChild(共享\u ptr oldChild,共享\u ptr newChild){}
void setParent(弱父项){
this->parent=parent;//parent.lock()){
父级->替换子级(此->共享来自此(),使共享());
}
}
字符串toString(){return“Item2”;}
};
类容器:公共基{
公众:
清单项目;
void connect(){
用于(自动和项目:项目){
弱_ptr ptr=this->weak_from_this();
item->setParent(ptr);//connect();
}
}
void replaceChild(共享\u ptr oldChild、共享\u ptr newChild){
用于(自动和项目:项目){
如果(项==oldChild){
项目=新子女;
item->setParent(this->weak_from_this());
项目->连接();
打破
}
}
}
字符串toString(){
ostringstream ss;
ss items.push_back(使_共享());
}
基础->连接();
cout-toString()感谢@rafix07!!!

protected
更改为
public
,它可以工作!!!

protected enable\u shared\u从\u this
更改为
public enable\u shared\u this
,然后您将看到所需的输出。.打开警告;此代码有很多问题。您可能需要使用“密钥惯用法”使构造函数有效地私有化,并在类中提供静态工厂函数(否则人们可能会在堆栈上创建非共享对象或创建自己的非共享对象,并且对象自认为应该共享)。这很有帮助!谢谢