好吧,所以我在做这个游戏时就像一个有3个不同对象的项目。
void Character::shoot(){
Shot* s = new Shot(blablabla);
shots.push_back(s);
}
这是动态发生的,目前我不删除指针,因此过一会儿它必须是指向该向量中镜头的指针的负载。
我使用Bot,Character和Shot,并且如我所说,我需要动态存储(最好从向量中)指向和删除指向该快照的指针的帮助。我已经像将所有拍摄对象都放在矢量中一样工作了,但是它们从未从那里消失。当它们与某物碰撞或超出屏幕宽度时,我想将其从程序中永久删除。
您可以在任何标准容器上使用std::remove
和std::erase
来删除内容:
Shot* to_be_removed = ...;
std::vector<Shot*>::iterator i = std::remove(shots.begin(),shots.end(),to_be_removed);
std::erase(i,shots.end());
delete (to_be_removed);//don't forget to delete the pointer
当您知道要删除的元素时,此方法有效。如果您不知道该元素,则必须找到一种方法来标识要删除的元素。同样,如果您有一个系统来标识元素,那么使用容器迭代器进行删除可能会更容易:
std::vector<Shot*>::iterator i = ...;//iterator the the element you want to remove
delete (*i);//delete memory
shots.erase(i);//remove it from vector
最后,如果您想从容器中删除所有指针并同时删除所有项目,则可以使用 std::for_each
//c++ 03 standard:
void functor(Shot* s)
{
delete(s);
}
std::for_each(shots.begin(),shots.end(),functor);
shots.clear();//empty the list
//or c++11 standard:
std::for_each(shots.begin(),shots.end(),[] (Shot * s){ delete(s); } );
//the rest is the same
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句