#include <memory>
class A
{
public:
A()
{
}
A( const A&& rhs )
{
a = std::move( rhs.a );
}
private:
std::unique_ptr<int> a;
};
此代码无法使用g ++ 4.8.4进行编译,并引发以下错误:
error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>& std::unique_ptr<_Tp, _Dp>
::operator=(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = int; _Dp = std::default_de
lete<int>]’
a = std::move( rhs.a );
^
我知道unique_ptr的复制构造函数和复制赋值构造函数已被删除且无法调用,但是我想在这里使用std::move
我将调用移动赋值构造函数。 The official documentation甚至表明这种类型的任务正在完成。
我的代码中有什么问题我没看到?
答案 0 :(得分:16)
A( const A&& rhs )
// ^^^^^
删除const
- 从对象移动是破坏性的,所以你不能从const
对象移动是公平的。
答案 1 :(得分:0)