我曾经在某个时间看到过一篇文章,提到向量会根据它们的使用方式导致内存泄漏,但是为了确认一下,我想问一下:
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
int main()
{
vector<somePtr*> listPtrs;
return 0;
//Detects memory leaks
}
而这并没有检测到任何东西:
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
int main()
{
{
vector<somePtr*> listPtrs;
}
return 0;
//No memory leaks detected
}
向量中的对象将在清除指针之前被删除。我记得读过向量、列表和其他std容器在它们所在的块自动删除,所以在例1中,由于内存泄漏函数在块结束之前调用,因此向量仍然存活并导致内存泄漏。
我不太确定,因为我已经很久没有看到这个问题了,而且我只能找到有关未删除对象的问题,只是移除指针。
这是真的吗?如果我使用包含向量和列表的全局类,会产生内存泄漏吗?
std::vector
并不会导致内存泄漏,粗心的程序员才会。 - Captain Obvlious