有人可以解释一下为什么 return 不能使用智能指针吗?

Can someone please explain me why can't return a smart pointer?

我想知道返回智能指针有什么问题。编译器抛出构造函数本身已被删除。所以我尝试返回引用并且它有效,为什么这可能?

#include <iostream>
#include <memory>
using namespace std;

using unique_int = std::unique_ptr<int>;
unique_int p_Int = std::make_unique<int>();

unique_int GetPtr()
{
    return p_Int;
}

unique_int& GetPtrAddr()
{
    return p_Int;
}

错误信息是

function "std::unique_ptr<_Ty, _Dx>::unique_ptr(const std::unique_ptr<_Ty, _Dx>&)[with _Ty=int, Dx=std::default_delete<int>]"(declared at line 3269 of "memory library path") cannot be referenced -- it is a deleted function

让我们看看当您 return 按值 std::unique_ptr 时会发生什么。 unique_int 函数创建了一个 std::unique_ptr 类型的临时对象,您 return 对 p_int 中的临时 std::unique_ptr 进行了复制初始化。但是 std::unique_ptr 的全部意义在于它不能被复制,只能 moved.