【发布时间】:2021-09-24 10:21:15
【问题描述】:
我想知道返回智能指针有什么问题。编译器抛出构造函数本身已被删除。所以我尝试返回引用并且它有效,为什么这可能?
#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
【问题讨论】:
-
因为它不再是独特的了。
-
...因为该构造函数已被删除。请在问题中以文本形式包含错误消息
-
是这样吗?这是我第一次处理这个问题,感谢您的回复!
-
复制构造函数不能破坏唯一性的唯一方法是转移所有权,但如果复制构造函数这样做会很糟糕。您必须显式移动唯一指针才能转移所有权
标签: c++ smart-pointers