-5

我非常确定向量调用了包含对象的析构函数,我只是在主向量上使用了 clear() 然后我重用了向量并且存储在其中的向量的值没有被清除......

编辑 - 代码:

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 他们以前的大小+新大小(新旧相加)

4

1 回答 1

3

矢量对象具有三个指针:开始、结束和保留存储结束。

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

所以被破坏对象的数据在保留的存储中仍然是可见的(例如使用调试器)。

于 2012-09-21T11:45:04.867 回答