有人可以解释一下为什么 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.
我想知道返回智能指针有什么问题。编译器抛出构造函数本身已被删除。所以我尝试返回引用并且它有效,为什么这可能?
#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.