清除所有事物后,所承诺的记忆保持不变

  • 本文关键字:记忆 清除 承诺 c++ winapi mfc
  • 更新时间 :
  • 英文 :


我有一个GUI应用程序,其中包含用于显示许多模拟蚂蚁的CVIEW。

i创建一个shared_ptr的向量来保存仿真控制器(如果我打算打开更多视图,则有很多(。每个控制器都包含许多依赖循环的共享_ptr。

启动仿真时,我打开任务管理器并查看程序内存的增加,直到程序停止(例如3000MB(。我关闭所有视图,并调用创建的重置方法,以清除用于存储输入和输出数据以及控制器的所有容器或向量。但是,我仍然看到3000MB没有更改为3MB或任何其他类似较小的数字。

我有记忆泄漏吗?因为如果我再次开始运行模拟,则所述的记忆将变为越来越大的数字,而我认为调用清除方法后应重置为最低的数字。

循环共享指针最终不会被删除。考虑以下内容:

struct Foo {
    std::shared_ptr<Foo> m_foo;
}
std::shared_ptr<Foo> foo1 = std::make_shared<Foo>();
std::shared_ptr<Foo> foo2 = std::make_shared<Foo>();
foo1.m_foo = foo2;
foo2.m_foo = foo1;

毕竟,foo1foo2指向 - 彼此之间。因此,共享指针都不会以零的参考计数最终删除。如果您的共享指针循环链接,则可能是您的代码的情况。

最新更新