一个容器如何既是连续的又支持移动语义呢?
std::vector 的示例:当 push_back() 使用 std::move 对左值调用时:
std::vector<MyClass> v;
MyClass obj;
MyClass obj2;
vt.push_back(std::move(obj));
vt.push_back(std::move(obj2));
obj 和 obj2 不一定在内存中彼此相邻分配。现在由于向量必须将其元素放在连续的内存中,在这种情况下移动语义将如何工作?在我看来,它必须将 obj2 复制到向量 v 的连续内存区域(在 obj 旁边),否则将无法满足连续性要求。但这需要一个副本,而不是移动。那么上面和这个有什么区别呢?:
MyClass obj;
MyClass obj2;
vt.push_back(std::move(obj));
vt.push_back(obj2);