我想知道在以下情况下如何编写移动赋值运算符:
class Foo : public vector<int>
{
public:
Foo(Foo&& other) : vector<int>(move(other)) {};
Foo& operator=(Foo&& other){ ????? };
};
它是如何完成的?
谢谢, 汤姆
答案 0 :(得分:4)
class Foo
: public vector<int>
{
public:
auto operator=( Foo&& other )
-> Foo&
{
vector<int>::operator=( move( other ) );
return *this;
};
Foo( Foo&& other )
: vector<int>( move( other ) )
{};
};
或者只是
class Foo
: public vector<int>
{
public:
auto operator=( Foo&& other ) -> Foo& = default;
Foo( Foo&& other )
: vector<int>( move( other ) )
{};
};
我不确定自动生成移动赋值运算符的规则,目前还不依赖于编译器正确实现这些规则(截至2014年6月)。