Por que a chamada explícita do construtor base move realmente chama o construtor base copy? [duplicado
Esta pergunta já tem uma resposta aqui:
Move construtor no objeto derivado 2 respostasEstou tentando chamar explicitamente o movedor de classe base através do movedor de classe derivada, mas,surpresa, que na verdade chama o controlador de cópia da classe base e NÃO o controlador de movimentação da classe bas
Estou a usarstd::move()
função em um objeto para garantir que o movedor derivado esteja sendo chamado!
O código
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;
}
PROGRAM OUTPUT:
base copy ctor
derived move ctor
omo você vê, o controlador de movimento da classe base está sendo esquecido, então como eu o cham