在我的简单游戏引擎中,我有一个包含指向实体的指针的向量。每个实体都分配有新的关键字。为了在我的实体上调用函数,我使用了一个迭代器,所以在删除我的实体时,我想我也会使用一个迭代器,如下所示:
vector<Entity*>::iterator iter;
for (iter = gameEntitys.begin(); iter != gameEntitys.end();) {
delete (*iter);
++iter;
}
但是我现在有一个可怕的内存泄漏,所有分析工具都指向这条线delete (*iter);
显然有什么问题,但是我删除向量中包含的实体的正确方法是什么(并清除另一个场景的向量)。据我所知,使用gameEntitys.clear();
是无用的,因为它只删除向量的元素,而不是实际调用它们的删除,因为它们是指针而不是实际数据。
编辑:我一直在看评论。Entity 类不是多态的,也没有任何子类。如果我停止使用动态内存并拥有一个普通的非指针实体数组会更有意义吗?
我知道存在内存泄漏的原因是,当应用程序启动时,内存使用量在崩溃之前会飙升至 2gb 以上。