当您有一个带有移动构造函数的派生对象,并且基础对象也具有移动语义时,从派生对象移动构造函数调用基础对象移动构造函数的正确方法是什么?
我首先尝试了最明显的事情:
Derived(Derived&& rval) : Base(rval)
{ }
但是,这似乎最终调用了 Base 对象的复制构造函数。然后我尝试std::move
在这里明确使用,如下所示:
Derived(Derived&& rval) : Base(std::move(rval))
{ }
这行得通,但我很困惑为什么它是必要的。我以为std::move
只是返回一个右值引用。但是因为在这个例子rval
中已经是一个右值引用,所以调用std::move
应该是多余的。但是如果我不在std::move
这里使用,它只是调用复制构造函数。那么为什么std::move
需要调用呢?