假設我有以下代碼:移動與向量::的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