为什么在矢量矢量上使用clear()不能清除那些矢量的值?

时间:2012-09-21 11:30:22

标签: c++ vector clear stdvector

我非常确定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的大小与之前的尺寸+新尺寸(新旧增加)进行比较

1 个答案:

答案 0 :(得分:3)

向量对象有三个指针:保留存储的开始,结束和结束。

clear()方法在每个包含的对象上调用析构函数,然后将结束指针设置为开头。

因此,在预留存储中仍然可以看到被破坏对象的数据(例如使用调试器)。