c++ - 尝试删除列表中的指针会导致内存使用量不断增长

标签 c++ list memory pointers memory-leaks

我认为我在这里尝试的方法是错误的,所以请告诉我我想要实现的目标是否不适用于这种“技术”。

我有一个名为 Spawner 的对象,它每 X 毫秒生成 KillerObjects,当我想要销毁 KillerObject 时,我调用:

void Spawner::RemoveKillerObject(KillerObject* removeThis)
{
    garbageList.push_back(removeThis);
}

然后每次更新 Spawner 时,它都会循环遍历 garbageList 以删除已被插入垃圾列表的每个对象,如下所示:

 void Spawner::Update(float elapsedTime)
 {
     elapsedSince += elapsedTime;
     if (elapsedSince > spawnRate)
     {
        Spawn();
        elapsedSince = 0;
     }
     for each (KillerObject* removeThis in garbageList)
     {
         spawnedObjects.remove(removeThis);
     }
     garbageList.clear();

     for each (KillerObject* ko in spawnedObjects)
     {
            ko->Update(elapsedTime);
     }
 }

Spawn 只是创建一个指向 KillerObject 的指针并将其插入 spawnedObject 列表。

对象在游戏中被“删除”,因为我无法与它们发生碰撞,也不会绘制它们。 但这会导致我的内存使用量不断增长,我知道这是原因,因为如果我删除这段代码,内存使用量就会稳定。

非常感谢指向正确方向的观点或任何其他帮助。

亲切的问候

马库斯

最佳答案

也许您实际上并没有删除对象?您要从列表中删除它们,但我在任何地方都看不到删除语句...?

关于c++ - 尝试删除列表中的指针会导致内存使用量不断增长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8308994/

相关文章:

html - 在 div 中居中垂直列表

python - 比较元组和列表之间的元素?

mysql - 与 MyIsam 相比,InnoDB 行大小较大

C++如何避免浮点运算错误

c++ - boost::variant 隐式转换为字符串

Python-类型错误 : iterable argument required

javascript - 奇怪的console.memory导致Chrome,时间线内存开发工具中的负数,Chrome错误?

c++ - C++ 中 void 函数和非 void 函数的区别

c++ - 提交时的 SIGSEGV

c++ - 无法在 SFML 2.4 中加载资源