【发布时间】:2012-07-19 08:03:40
【问题描述】:
假设我有以下代码:
#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::vector 的元素是连续存储的,这与 std::list 不同。在上面的代码中a2 被移动了,但是真的没有将a2 复制到向量va 中吗? va.push_back(a2);和va.push_back(move(a2));有什么区别?
【问题讨论】:
-
在您的情况下,
std::moveinga2完全什么都不做,因为它是平面类型(即,它没有外部数据)并且仍然只是复制。 -
您可能想阅读Can someone please explain move semantics to me? 了解移动语义的介绍。