Cha*_*l72 45 c++ move-semantics c++11
当你有一个带有移动构造函数的派生对象,并且基础对象也有移动语义时,从派生对象移动构造函数调用基础对象移动构造函数的正确方法是什么?
我首先尝试了最明显的事情:
Derived(Derived&& rval) : Base(rval)
{ }
Run Code Online (Sandbox Code Playgroud)
但是,这似乎最终调用了Base对象的复制构造函数.然后我尝试std::move
在这里明确使用,像这样:
Derived(Derived&& rval) : Base(std::move(rval))
{ }
Run Code Online (Sandbox Code Playgroud)
这有效,但我很困惑为什么这是必要的.我以为std::move
只返回一个右值引用.但是因为在这个例子rval
中已经是一个右值引用,所以调用std::move
应该是多余的.但如果我不在std::move
这里使用,它只是调用复制构造函数.那么为什么要求std::move
必要?
归档时间: |
|
查看次数: |
13083 次 |
最近记录: |