#include <iostream>
#include <vector>
class Dummy {
public:
Dummy(int size=5) {array.reserve(size);};
size_t capacity(){return array.capacity();};
private:
std::vector<unsigned long long> array;
};
int main(int argc, char* argv[]){
Dummy test1(10);
Dummy test2(10);
std::cout << "Initial capacity test1: " << test1.capacity() << std::endl;
std::cout << "Initial capacity test2: " << test2.capacity() << std::endl;
Dummy foo(test1);
std::cout << "After copy capacity: " << foo.capacity() << std::endl;
Dummy bar(std::move(test2));
std::cout << "After move capacity: " << bar.capacity() << std::endl;
}
以上是使用g ++ 7.4.0构建的,并返回以下内容:
初始容量测试1:10
初始容量测试2:10
复制后的容量:0
移动量之后:10
为什么移动构造对象保留了空私有向量的容量,而复制构造对象却没有呢?
答案 0 :(得分:1)
因为副本是副本。
复制矢量时,它会复制具有的元素。不是为将来的元素计划的空白空间。虽然要尽可能快地移动,结果却盲目地移动了所有东西。我个人不会在此计划我的代码。您应该依靠移动移动保留空间,也不要依靠移动在其自身之后留下一个空容器。