为一个普通的派生类编写一个移动赋值运算符

时间:2014-06-13 12:25:25

标签: c++ c++11 move-semantics assignment-operator

我想知道在以下情况下如何编写移动赋值运算符:

class Foo : public vector<int>
{
public:
  Foo(Foo&& other) : vector<int>(move(other)) {};
  Foo& operator=(Foo&& other){ ????? };
};

它是如何完成的?

谢谢, 汤姆

1 个答案:

答案 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月)。