假设我有以下代码:移动与向量::的push_back
#include <vector>
struct A {
int a;
int x;
};
int main() {
using namespace std;
A a1;
A a2;
vector<A> va;
va.push_back(a1);
va.push_back(move(a2));
}
我知道的std ::向量的元素被连续存储,不像一个std ::名单。在上面的代码a2
被移动,但真的没有a2
复制到矢量va
? va.push_back(a2);
和有何区别?
在你的情况下,'std :: move'ing'a2'确实是* nothing *,因为它是一个平面类型(即它没有外部数据)并且仍然会复制。 – Xeo 2012-07-20 03:59:26
@cdhowie谢谢。纠正。 – ggg 2012-07-20 04:01:55
您可能想阅读[可以请某人解释移动语义给我?](http://stackoverflow.com/questions/3106110/)的移动语义介绍。 – fredoverflow 2012-07-20 07:45:53