问题遇到的现象和发生背景
如下所示,函数get_ptr返回一个shared_ptr,调用时用一个原始对象ClassA test 接收,函数返回后会构造一个shared_ptr临时对象,然后*操作之后赋值给ClassA test 。
此时让share_aa 指向另一个对象,weak_aa显示原对象引用计数为0,该对象仍可用,该操作是否存在危险?
问题相关代码,请勿粘贴截图
shared_ptr<ClassA>share_aa = make_shared<ClassA>();
weak_ptr<ClassA>weak_aa = share_aa;
shared_ptr<ClassA> get_ptr(){
return share_aa;
}
int main(int argc, char* argv[])
{ // 引用计数1
cout<<weak_aa.use_count()<<endl;;
ClassA& test = *get_ptr();
share_aa = make_shared<ClassA>();
//引用计数0
cout<<weak_aa.use_count()<<endl;
// ub??
cout<<test.a<<endl;
}