C++ 带有静态std::vector的内存泄漏(某种程度上)

C++ 带有静态std::vector的内存泄漏(某种程度上),c++,memory,stl,vector,memory-leaks,C++,Memory,Stl,Vector,Memory Leaks,我在一个类中有一个静态的std::vector。当我使用Microsoft的内存泄漏检测工具时: _CrtMemState state; _CrtMemCheckpoint( & state); _CrtMemDumpAllObjectsSince( & state ); 在我把东西插入向量后,它报告了一个漏洞。这对我来说很有意义,因为在向量中插入内容时会分配新的空间。直到程序终止,这个空间才被释放(因为向量是静态的)。是这样吗 在包含向量的类的析构函数中,我删除了放入向量中的

我在一个类中有一个静态的
std::vector
。当我使用Microsoft的内存泄漏检测工具时:

_CrtMemState state;
_CrtMemCheckpoint( & state);
_CrtMemDumpAllObjectsSince( & state );
在我把东西插入向量后,它报告了一个漏洞。这对我来说很有意义,因为在向量中插入内容时会分配新的空间。直到程序终止,这个空间才被释放(因为向量是静态的)。是这样吗


在包含向量的类的析构函数中,我删除了放入向量中的对象。但是,发生插入时分配的内存仍然挂起。是否仍要删除此空间?

您可以将向量与空向量交换-这将释放内存


另请参见

以补充詹姆斯所写的内容。他打算这样做:

std::vector<T>().swap(v);
std::vector().swap(v);

其中“v”是要释放其内存的向量。

这只是Visual Studio的一个怪癖。向量析构函数确实释放了内存,但是内存检查模块并不总是能发现它,所以它会抱怨。这有点痛苦,但没什么好担心的。

你能展示一下在向量中插入内容的代码,以及删除放入向量中的对象的代码吗?如果你感兴趣,我可以,但是James和ilproxyil帮我解决了这个问题。如果你有兴趣,请告诉我。太棒了!成功了。谢谢我真希望我早一点问这个问题,而不是几天把头撞在墙上。:-)这个答案是错误的:。不是一个奇怪的VS。他的向量是静态的。在CRT释放静态数据之前,他正在检查是否有泄漏。这是个怪癖。VS合并了一个简化版本,以前称为Nu Mega Bounds Checker。以前,Bounds Checker的旧版本可以很好地工作,但是与VS7.x合并的版本就错了。它定期报告静态对象中不存在的内存泄漏。