【发布时间】:2020-11-15 11:56:14
【问题描述】:
我正在构建一些std::vector<Obj>,其中Obj 是可以移动构造和分配的大型对象(例如,考虑Obj 是大向量)。代码通常是一个循环,例如
std::vector<Obj> v;
while (...) {
Obj foo = some client code(...);
// ... some complicated stuff modifying foo
v.push_back(foo);
}
如您所见,foo 被推入向量后就不需要了。
我的问题是
-
写起来有意义吗
v.push_back(std::move(foo));向编译器表明它可以获取 foo 的内容。
-
如果有,真的需要吗?事实上,编译器可能会注意到
foo在被推送后立即被破坏,以便可以移动它......实际的编译器是否使用这些优化?
【问题讨论】:
标签: c++ c++11 optimization move