好吧,所以我正在像一个项目一样做这个游戏,其中我有 3 个不同的对象。
void Character::shoot(){
Shot* s = new Shot(blablabla);
shots.push_back(s);
}
这是动态发生的,目前我不删除指针,因此一段时间后它必须是指向该 vector 中的镜头的指针。
我使用机器人、角色和镜头,正如我所说,我需要帮助来动态存储和删除指向镜头的指针,最好是从 vector 中。我已经让它工作了,就像我把所有拍摄的物体放在一个 vector 中一样,但它们永远不会从那里消失。当它们与某些东西碰撞或超出我的屏幕宽度时,我想从我的程序中永久删除它们。
最佳答案
您可以使用std::remove
和 std::erase
在任何 std 容器上删除内容:
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
关于c++ - 如何动态地从 vector 中删除指向 C++ 中的对象的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21131229/