unique_ptr<A> myFun()
{
unique_ptr<A> pa(new A());
return pa;
}
const A& rA = *myFun();
此代码可以编译,但 rA
包含垃圾。有人可以向我解释为什么这段代码无效吗?
注意:如果我在取消引用之前将 myFun
的返回值分配给命名的 unique_ptr
变量,它可以正常工作。
最佳答案
unique_ptr
会将所有权传递给另一个 unique_ptr
,但在您的代码中,没有任何内容可以从返回的指针中捕获所有权。换句话说,它不能转移所有权,所以它会被销毁。
正确的做法是:
unique_ptr<A> rA = myFun(); // Pass the ownership
或
const A rA = *myFun(); // Store the values before destruction
在您的代码中,返回的指针将被破坏,并且引用正在引用即将破坏的对象,之后使用此引用会调用未定义的行为。
关于c++ - 取消引用临时的 unique_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30858850/