【发布时间】:2011-01-09 17:18:49
【问题描述】:
在 C++11 中,当我们想要将值移动(破坏性复制)到容器中时,我们可以使用 std::move 来提高效率:
SomeExpensiveType x = /* ... */;
vec.push_back(std::move(x));
但我找不到任何相反的方向。我的意思是这样的:
SomeExpensiveType x = vec.back(); // copy!
vec.pop_back(); // argh
这在适配器上更频繁(复制弹出),例如stack。这样的事情是否存在:
SomeExpensiveType x = vec.move_back(); // move and pop
为了避免复制?这已经存在了吗?我在n3000中找不到类似的东西。
我有一种感觉我错过了一些非常明显的东西(比如它的不必要性),所以我为“ru dum”做好了准备。 :3
【问题讨论】:
-
move 方法对超出范围的变量有什么影响?例如,如果我创建一个对象,将其添加到成员容器中,则该对象超出范围......由于没有复制,成员容器中的对象是否仍然定义?
-
是的,它被移到了容器中。如果你不确定它们是如何工作的,你会想要谷歌右值引用。
-
非常感谢...我将不得不再深入研究一下,哈哈。从表面上看,这似乎会导致问题。
标签: c++ c++11 containers rvalue-reference