0
我是C++新手,很遗憾,如果它是一个虚拟问题。从矢量列表中删除特定对象
我想创建一个方法,将从一个向量中删除给定的指针,并删除它的对象。这就是我现在所拥有的:
void Engine::destroyObject(GameObject* obj) {
if (obj == nullptr) {
std::cout << "Error: GameObject pointer given is null!" << std::endl;
return;
}
else if (m_GameObjects.empty()) {
std::cout << "Error: Trying to destroy GameObject while list is empty!" << std::endl;
return;
}
auto it = std::remove(m_GameObjects.begin(), m_GameObjects.end(), obj);
if (it != m_GameObjects.end()) {
delete obj;
m_GameObjects.erase(it, m_GameObjects.end());
}
}
GameObject* Engine::findObject(std::string name) {
return *std::find_if(m_GameObjects.begin(), m_GameObjects.end(), [name](GameObject* e) { return e->getName() == name; });
}
我打电话的方法是这样的:
GameObject* obj = findObject("Random");
destroyObject(obj);
但由于某些原因,在m_GameObjects.erase(it, m_GameObjects.end());
与错误我的程序崩溃“矢量迭代器不dereferencable”
我已经尝试将行更改为it = m_GameObjects.erase(it, m_GameObjects.end());
但这并没有改变任何东西。
提前致谢!
编辑:这里有更多的信息 游戏对象仅仅是一个普通类(有一些数据,如姓名...) 的findProject方法工作得很好,它是擦除这是造成错误的行。
无法复制:http://coliru.stacked-crooked.com/a/98a14577189a140f请修改您的问题以包含[mcve],它看起来像那个链接,但包含实际上需要的代码以获得相同的你做错了。 – aschepler
可能不相关,但如果vector中没有对象具有请求的名称,则您的'findObject'函数具有未定义的行为。 – aschepler
发动机是否必须参与?如果你使用'boost :: shared_ptr',一个the_vector.erase(它)会得到被调用的对象析构函数。 – lakeweb