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析构函数中删除容器,但这似乎不起作用).
在vector 被摧毁的程序退出时,你并不需要,以确保它.你也需要确保_CrtDumpMemoryLeaks的是,破坏后调用,如果你不希望它报告已分配的内存"泄露":
int main()
{
{ Subject subject; }
_CrtDumpMemoryLeaks();
return 1;
}
Run Code Online (Sandbox Code Playgroud)