使用STL容器的C++内存泄漏

Jam*_*s B 1 c++ memory-leaks stl

以下代码给我一个内存泄漏(使用Visual Studio):

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#include <vector>
#include <memory>

struct Listener {};

struct Subject
{
    std::vector<Listener*> listeners;
};

int main(void)
{
    Subject subject;
    _CrtDumpMemoryLeaks();
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

我认为这是因为当Subject实例化类时,STL向量容器在堆上使用内存.当程序退出时,如何确保向量容器被销毁?(我尝试在Subject析构函数中删除容器,但这似乎不起作用).

Cas*_*sey 7

在vector 被摧毁的程序退出时,你并不需要,以确保它.你也需要确保_CrtDumpMemoryLeaks的是,破坏后调用,如果你不希望它报告已分配的内存"泄露":

int main()
{
    { Subject subject; }
    _CrtDumpMemoryLeaks();
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

  • @JamesB问题是不报告"内存泄漏",它报告分配的内存.如果您希望分配的内存代表泄漏,则需要确保在所有析构函数运行后调用它. (3认同)