我有一个GUI应用程序,其中包含用于显示大量模拟蚂蚁的CView。
我创建了一个shared_ptr的向量来保存模拟控制器(如果我打算打开更多视图,那就有很多)。每个控制器都包含许多与循环相关的shared_ptr。
当我开始模拟时,我打开我的任务管理器,看到程序内存增加,直到程序停止(例如3000MB)。我关闭所有视图并调用创建的Reset方法来清除用于存储输入和输出数据的所有容器或向量以及控制器。然而,我仍然看到3000MB没有变回3MB或任何其他类似的较小数字,例如。
我有内存泄漏吗?因为如果我再次开始运行我的模拟,所提交的已提交或已使用的内存会变为越来越大的数字,而我认为应该在调用清除方法后将其重置为尽可能低的数字。
答案 0 :(得分:2)
循环共享指针最终不会被删除。请考虑以下事项:
foo1
毕竟,foo2
和this
指向并拥有彼此。因此,共享指针最终都不会以引用计数为零结束,也不会被删除。如果你的共享指针是循环链接的话,这可能就是你的代码正在发生的事情。