【发布时间】:2011-05-04 11:04:48
【问题描述】:
如果派生对象具有移动构造函数,并且基对象也具有移动语义,那么从派生对象移动构造函数调用基对象移动构造函数的正确方法是什么?
我首先尝试了最明显的事情:
Derived(Derived&& rval) : Base(rval)
{ }
但是,这似乎最终调用了 Base 对象的复制构造函数。然后我在这里明确地尝试使用std::move,如下所示:
Derived(Derived&& rval) : Base(std::move(rval))
{ }
这行得通,但我很困惑为什么它是必要的。我认为std::move 只是返回一个右值引用。但是因为在这个例子中rval 已经是一个右值引用,所以对std::move 的调用应该是多余的。但是如果我在这里不使用std::move,它只会调用复制构造函数。那么为什么需要拨打std::move 呢?
【问题讨论】:
标签: c++ c++11 move-semantics