Наследование оператора присваивания перемещения в C++

Мне нужна помощь в понимании процесса наследования оператора присваивания ходов. Для данного базового класса

class Base
{
public:
    /* Constructors and other utilities */
    /* ... */

    /* Default move assignment operator: */
    Base &operator=(Base &&) = default;
    /* One can use this definition, as well: */
    Base &operator=(Base &&rhs) {std::move(rhs); return *this;}

    /* Data members in Base */
    /* ... */
};

class Derived : public Base
{
public:
    /* Constructors that include inheritance and other utilities */
    /* ... */

    Derived &operator=(Derived &&rhs);

    /* Additional data members in Derived */
    /* ... */
};

Я не совсем уверен, как вызвать базовый оператор присваивания перемещения в производном классе? Должен ли я просто использовать оператор области видимости и сказать

Base::std:move(rhs);

с последующим std::move(...) из дополнительных пунктов, определенных в Derived класс, или есть какой-то другой метод?

1 ответ

Для вызова унаследованных operator=обычно вы вызываете наследственное operator=,

Derived &operator=(Derived &&rhs) {
   Base::operator=(std::move(rhs));
   // do the derived part
   return *this;
}

Не имеет значения, является ли это назначением копирования, назначением перемещения или каким-либо определенным пользователем назначением, шаблон остается тем же.

Другие вопросы по тегам