当我尝试删除动态矢量对象的动态内存元素时,我不得不遍历整个矢量大小,以确保完全释放。C++矢量动态内存释放/删除
class CV{
public:
float x;
float y;
CV();
CV(float, float);
~CV();
};
int main(){
vector<CV*>* cars;
cars = new vector<CV*>;
//create objects with new, push into vetor
for(int j=0;j<4;j++){
cars->push_back(new CV(10.0+j, 11.99+j));
}
while(cars->size() > 0 ){
for(int i=0;i<cars->size();i++){
delete (*cars)[i];
cars->erase(cars->begin()+i);
}
cout << "size:"<< cars->size() << endl;
}
delete cars;
return 0;
}
这将输出:
size:2
size:1
size:0
的载体,似乎当我试图删除遍历每第二个元素,因为我需要额外的while循环,以保证总的释放。
我似乎错过了一些有关矢量的内部工作原理,我试过阅读矢量C++参考,并且我知道矢量将元素存储在一个连续的位置,并且他们为可能的增长分配额外的存储空间,但是我失败了了解此代码的行为。
'汽车=新的向量;'这是一个坏主意,为什么不'矢量汽车;'?你拿着原始指针项目已经足够复杂了一切...... –
你注意到有'std :: erase()'函数顺便说一句。 –
@πάνταῥεῖ没有'std :: erase'功能。你的意思是'std :: vector :: erase'或'std :: remove'? –