【发布时间】:2017-09-14 19:49:18
【问题描述】:
基本上,移动构造函数的参数就是类本身。
但是,如果我想从左值构造类的对象而不进行复制操作,我可以这样做吗?
class A{
A(const LargeDataType& inData):data(inData) {} // constructor 1
A(LargeDataType&& inData):data(std::move(inData)) {} // constructor 2
private:
LargeDataType data;
};
使用它:
方法一:
LargeDataType outData = 100;
A objA(std::move(outData)); // call constructor 2
方法2(如果没有实现构造函数2):
LargeDataType outData = 100;
A objA(std::move(outData)); // call constructor 1
这样构造objA的时候就没有拷贝操作了。我的问题是:
这样创建移动构造函数是否合法?
这比传统构造函数更高效,因为在创建 objA 期间不需要复制?
方法2是否能比方法1更好,效率也一样?
非常感谢!
【问题讨论】:
-
这些恶作剧并不能避免任何复制,因为“移动”和
int与复制它是一样的。 -
int没有移动构造函数或任何移动操作,所以这一切都只是副本...... -
对于
int,它并不是很有用,但可能对std::string或std::vector有用。 -
@Jarod42 是的,这只是一个例子,我想将它用于更复杂的数据类型
-
您当然可以编写这样的构造函数,这样做甚至可以带来好处。但它不是移动构造函数。
标签: c++ visual-studio c++11 move-semantics move-constructor