Почему явный вызов конструктора базовых перемещений фактически вызывает конструктор базовых копий? [Дубликат]
На этот вопрос уже есть ответ:
Переместить конструктор на производный объект 2 ответаЯ пытаюсь явно вызвать ctor базового класса через ctor производного класса, но,surprise, который фактически вызывает копию ctor базового класса, а не ctor перемещения базового класса.
Я используюstd::move()
функция на объекте, чтобы быть уверенным, что производный ctor перемещения вызывается!
Код
class Base
{
public:
Base(const Base& rhs){ cout << "base copy ctor" << endl; }
Base(Base&& rhs){ cout << "base move ctor" << endl; }
};
class Derived : public Base
{
public:
Derived(Derived&& rhs) : Base(rhs) { cout << "derived move ctor"; }
Derived(const Derived& rhs) : Base(rhs) { cout << "derived copy ctor" << endl; }
};
int main()
{
Derived a;
Derived y = std::move(a); // invoke move ctor
cin.ignore();
return 0;
}
ПРОГРАММНЫЙ ВЫХОД:
базовая копия ctor
забрали ход ctor
Как вы видите, ctor перемещения базового класса забыт, так как мне его назвать?