C++内存泄漏由静态变量

C++ memory leaks by static variable

本文关键字:静态 变量 泄漏 内存 C++      更新时间:2023-10-16

>Visual Studio 2012告诉我以下程序有内存泄漏。这是否正确,如果是,如何在使用(例如)静态向量时避免内存泄漏?

#include <crtdbg.h>
#include <vector>
struct A {
  static std::vector<int> a;
};
std::vector<int> A::a;
int main()
{
  _CrtDumpMemoryLeaks();
    return 0;
}

您在静态变量的作用域完成之前调用该函数。因此,您期望变量已被销毁是错误的。

在调用该函数之前,需要等到作用域结束。当然,这很难做到,但运行时可以帮助您,如文档中所述:

通过使用 _CrtSetDbgFlag 函数打开 _crtDbgFlag 标志的 _CRTDBG_LEAK_CHECK_DF 位字段,可以在程序终止时自动调用该函数。