我有一个向量类vector<VectorClass*> myVector;
在myVector.push_back(*data);
被调用10次之后,我试图删除向量类。初始尺寸显示10.
删除后,cout的大小仍然显示10.我不是删除它吗?
cout << myVector.size(); // myVector.size() = 10
if(myVector.size() > 0){
for (vector<VectorClass*>::iterator it = myVector.begin() ; it != myVector.end(); ++it){
*it = 0;
delete[] *it;
}
}
cout << myVector.size(); // myVector.size() = 10
答案 0 :(得分:2)
删除向量元素的内容不会减小向量的大小,但您甚至无法正确删除内容,因为您为每个指针指定了null
然后使用delete[]
,所以什么都不会发生。
删除之前删除*it = 0;
(删除之后可能不重要),然后删除每个元素内容并完成循环使用myVector.clear()
清除矢量并将大小设置为零。
答案 1 :(得分:2)
您正在尝试*)
删除向量中的每个元素,但不会从向量中删除指针。除非向量即将超出范围,否则应在此操作后清空向量。您的代码也可以简化一些。替换这个:
if(myVector.size() > 0){
for (vector<VectorClass*>::iterator it = myVector.begin() ; it != myVector.end(); ++it){
*it = 0;
delete[] *it;
}
}
用这个:
for (auto a : myVector)
{
delete[] a;
}
myVector.clear();
另请注意,如果您使用delete[]
分配了每个元素,则只应使用new[]
。如果您使用new
进行了分配,则应使用delete
。
而且,如果您使用new
进行分配,则应考虑将向量声明为vector<VectorClass> myVector;
,这样就无需手动delete
每个元素。
*)
我说您尝试删除每个元素,因为您在使用delete[]
之前为每个元素指定了一个空指针。这使得delete[]
毫无意义。
答案 2 :(得分:1)
您真的要删除向量的所有元素吗?然后使用clear
的建议解决方案就可以了。
如果您只想删除某些元素,则需要使用std::vector::erase
。另见