Если у вас есть производный объект с конструктором перемещения и базовый объект также имеет семантику перемещения, как правильно вызвать конструктор перемещения базового объекта из конструктора перемещения производного объекта?
Сначала я попробовал самое очевидное:
Derived(Derived&& rval) : Base(rval)
{ }
Однако, похоже, в конечном итоге вызывается конструктор копирования базового объекта . Затем я попытался явно использовать std::move
здесь, вот так:
Derived(Derived&& rval) : Base(std::move(rval))
{ }
Это сработало, но я запутался, зачем это нужно. Я думал, что std::move
просто возвращает ссылку на значение. Но поскольку в этом примере rval
уже является ссылкой на rvalue, вызов std::move
должен быть излишним. Но если я не использую std::move
здесь, он просто вызывает конструктор копирования. Так зачем звонить на std::move
необходимо?