给出一个矢量
std::vector<BigObject> v;
Run Code Online (Sandbox Code Playgroud)
和工厂功能
BigObject genBigObject();
Run Code Online (Sandbox Code Playgroud)
我想避免复制BigObject实例.
哪一个更快?
v.push_back(genBigObject());
Run Code Online (Sandbox Code Playgroud)
要么
v.push_back(std::move(genBigObject()));
Run Code Online (Sandbox Code Playgroud)
我可以依靠复制省略将事实八方通发生的呢?(我可以删除复制构造函数BigObject,但是,好吧......)
Bar*_*rry 10
其目的std::move()是采用左值并将其视为右值,以便明确其他功能,如果他们愿意,可以蚕食物体的内部结构.
genBigObject()已经是右值了.你不需要把move()它变成一个 - move()只是没有为你提供任何有价值的东西.所以就是不要这样做.你甚至不需要深入了解下游究竟发生了什么 - 这move()是代码和读者的信号,你正在做一些可能不安全的事情,但在这种情况下......你不是.
对于这种特定情况,您push_back()无论如何都要调用rvalue引用重载- 这会触发临时对象的临时实现.是否由于特定的调用push_back()或稍早的调用而发生的临时实现move()没有任何区别.