¿Por qué la llamada explícita del constructor de movimiento base realmente llama al constructor de copia base? [duplicar
Esta pregunta ya tiene una respuesta aquí:
Move constructor en objeto derivado 2 respuestasEstoy tratando de llamar a la clase base move ctor explícitamente a través de la clase derivada move ctor pero,¡sorpresa, que en realidad llama a la copia de la clase base ctor NO al movimiento de la clase base ctor.
Estoy usandostd::move()
¡funcionen en un objeto para asegurarse de que se está invocando el movimiento derivado ctor!
El 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;
}
SALIDA DEL PROGRAMA:
base copy ctor
derived move ctor
Como puede ver, el movimiento de la clase base se está olvidando, entonces, ¿cómo lo llamo?