所有事情都被清除后,内存提交仍然保持不变

时间:2017-04-28 05:16:58

标签: c++ winapi mfc

我有一个GUI应用程序,其中包含用于显示大量模拟蚂蚁的CView。

我创建了一个shared_ptr的向量来保存模拟控制器(如果我打算打开更多视图,那就有很多)。每个控制器都包含许多与循环相关的shared_ptr。

当我开始模拟时,我打开我的任务管理器,看到程序内存增加,直到程序停止(例如3000MB)。我关闭所有视图并调用创建的Reset方法来清除用于存储输入和输出数据的所有容器或向量以及控制器。然而,我仍然看到3000MB没有变回3MB或任何其他类似的较小数字,例如。

我有内存泄漏吗?因为如果我再次开始运行我的模拟,所提交的已提交或已使用的内存会变为越来越大的数字,而我认为应该在调用清除方法后将其重置为尽可能低的数字。

1 个答案:

答案 0 :(得分:2)

循环共享指针最终不会被删除。请考虑以下事项:

foo1

毕竟,foo2this指向并拥有彼此。因此,共享指针最终都不会以引用计数为零结束,也不会被删除。如果你的共享指针是循环链接的话,这可能就是你的代码正在发生的事情。