内存泄漏(有点)与静态std :: vector

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

_CrtMemState state;
_CrtMemCheckpoint( & state);
_CrtMemDumpAllObjectsSince( & state );

它向插件插入东西后会报告泄漏。 这对我来说很有意义,因为在向量中插入某些内容时会分配新空间。 这个空间不会被释放,直到程序终止(因为矢量是静态的)。 这是正确的吗?

在包含向量的类的析构函数中,我将删除放入向量中的对象。 但是,发生插入时分配的内存仍然悬而未决。 无论如何删除这个空间?


你可以交换一个空的矢量 - 这将释放内存。

另请参阅Q:缩小矢量


增加詹姆斯写的东西。 他意味着要这样做:

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

'v'是你想要释放内存的向量。


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

链接地址: http://www.djcxy.com/p/19921.html

上一篇: Memory leak (sort of) with a static std::vector

下一篇: Allowed memory size of # bytes exhausted