我非常确定vector会调用包含对象的析构函数,我只是在主向量上使用了clear(),然后我重用了向量,并且没有清除存储在其中的向量的值... < / p>
编辑 - 代码:
vector<vector<int> > flush1;
flush1.reserve(4);
for(int i = 0; i != 4; ++i) flush1[i].reserve(7);
flush1.clear();
flush1[0].push_back(some_int);
flush1[1].push_back(some_int);
flush1[2].push_back(some_int);
flush1[3].push_back(some_int);
cout the size from flush1[0-3];
flush1.clear();
再次
flush1[0].push_back(some_int);
flush1[1].push_back(some_int);
flush1[2].push_back(some_int);
flush1[3].push_back(some_int);
并将flush1 [0-3] cout-s的大小与之前的尺寸+新尺寸(新旧增加)进行比较
答案 0 :(得分:3)
向量对象有三个指针:保留存储的开始,结束和结束。
clear()
方法在每个包含的对象上调用析构函数,然后将结束指针设置为开头。
因此,在预留存储中仍然可以看到被破坏对象的数据(例如使用调试器)。