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