Наследование оператора присваивания перемещения в 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;
}
Не имеет значения, является ли это назначением копирования, назначением перемещения или каким-либо определенным пользователем назначением, шаблон остается тем же.