【发布时间】:2019-04-18 15:28:19
【问题描述】:
我正在制作一个使用大量包含指针的向量的程序,我担心我删除指针的方式可能会导致内存泄漏。
例如,我如何将项目符号添加到矢量:
Bullet* aNewBullet;
aNewBullet = new Bullet(x,y,dirX,dirY,size,duration);
aNewBullet->assignTexture(btext);
bulletVector.push_back(aNewBullet);
这是我从向量中删除项目符号的方法(例如,如果它超出了它的范围)
int i=0;
while (i<bulletVector.size()){
if (bulletVector[i]->getDuration() ==0)
bulletVector.erase(bulletVector.begin() + i);
else i++;
}
我是否通过告诉矢量擦除来删除项目符号? 或者我应该这样做
int i=0;
while (i<bulletVector.size()){
if (bulletVector[i]->getDuration() ==0)
delete bulletVector[i];
bulletVector.erase(bulletVector.begin() + i);
else i++;
}
相反?这会不会先删除指针,然后再次从向量中删除记录,从而弄乱向量大小?
删除指针也会调用子弹析构函数(~Bullet())吗?
【问题讨论】:
-
你需要使用
new/delete吗?为什么不直接使用std::vector<Bullet>? -
原始指针的集合并不是一个好主意。集合要么拥有指向的对象,要么不拥有。如果它确实拥有它们,为什么要使用指针呢?如果它不拥有它们,那么管理对象的生命周期就会变得非常复杂。
标签: c++ pointers vector memory-leaks