我在课堂上有一个静态std::vector
。当我使用微软的内存泄漏检测工具时:
_CrtMemState state;
_CrtMemCheckpoint( & state);
_CrtMemDumpAllObjectsSince( & state );
在我将内容插入向量后报告泄漏。这对我来说很有意义,因为当向量中插入某些内容时会分配新的空间。在程序终止之前,该空间不会被释放(因为向量是静态的)。这是对的吗?
在包含向量的类的析构函数中,我正在删除放入向量的对象。但是,插入时分配的内存仍然存在。反正有没有删除这个空间?
答案 0 :(得分:16)
您可以将矢量换成空的 - 这将释放内存。
答案 1 :(得分:8)
添加詹姆斯所写的内容。他的意思是这样做:
std::vector<T>().swap(v);
其中'v'是要释放其内存的向量。
答案 2 :(得分:0)
这只是Visual Studio的一个怪癖。向量析构函数确实释放了内存,但内存检查模块并不总是发现它,所以它会抱怨。这有点痛苦,但无需担心。