c++ - 取消引用临时的 unique_ptr

标签 c++ c++11 unique-ptr

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/

相关文章:

c++ - 内存中的Opencv Mat表示

c++ - 0xC0000005 : Access violation writing location 0x00000004. '

c++ - 为什么 std::unique_ptr 比标准指针慢得多……在优化之前?

c++ - 非静态与静态函数和变量

c++ - 与 STL 和 std::basic_string 不同,为什么 std::function 没有默认分配器

c++ - 我正在尝试在函数中使用新内存新堆内存,但它给出了一个错误

c++ - 将 clang 构建的可执行文件与 g++-v6 构建的 boost 库链接时出错

c++ - 唯一 ptr 初始化断言失败

C++ unique_ptr vector

c++ - 奇怪的 C++ 语法?