gpt4 book ai didi

c++ - 如何动态地从 vector 中删除指向 C++ 中对象的指针?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:46:43 24 4
gpt4 key购买 nike

好吧,我正在做这个游戏就像一个项目,我有 3 个不同的对象。

void Character::shoot(){
Shot* s = new Shot(blablabla);
shots.push_back(s);
}

这是动态发生的,目前我没有删除指针,所以它必须在一段时间后加载指向该 vector 中镜头的指针。

我使用 Bot、Character 和 Shot,正如我所说,我需要帮助来动态存储和删除指向镜头的指针,最好是从 vector 中。我已经让它工作了,就像我把所有拍摄的物体放在一个 vector 中一样,但它们永远不会从那里消失。当它们与某些东西发生碰撞或超出我的屏幕宽度时,我想从我的程序中永久删除它们。

最佳答案

您可以使用 std::removestd::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

关于c++ - 如何动态地从 vector 中删除指向 C++ 中对象的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21131229/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com