考虑这段代码:
template<typename T>
T mov(T&& t){
return std::move(t);
}
int main(){
std::unique_ptr<int> a = std::unique_ptr<int>(new int());
std::unique_ptr<int> b = mov(a);
}
该mov
函数应该简单地获取一个通用引用并按值返回它,move
而不是复制它。因此,调用此方法时不应涉及复制。unique_ptr
因此,使用只能移动的 a 调用这样的函数应该没问题。但是,此代码无法编译:我收到错误:
test.cpp:24:34: error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = int; _Dp = std::default_delete<int>]’
std::unique_ptr<int> b = mov(a);
所以似乎 C++ 试图调用unique_ptr
当然被删除的复制构造函数。但是为什么这里会出现副本呢?我怎样才能让这段代码编译?