首页 文章

内存泄漏(类型)与静态std :: vector

提问于
浏览
5

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

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

我将内容插入向量后会报告泄漏 . 这对我来说很有意义,因为当向量中插入某些内容时会分配新的空间 . 在程序终止之前,该空间不会被释放(因为向量是静态的) . 这是正确的吗?

在包含向量的类的析构函数中,我正在删除放入向量的对象 . 但是,插入时分配的内存仍然存在 . 反正有没有删除这个空间?

3 回答

  • 16

    你可以用空的向量交换向量 - 这将释放内存 .

    另见Q: Shrinking a vector

  • 0

    添加詹姆斯所写的内容 . 他的意思是这样做:

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

    其中'v'是要释放其内存的向量 .

  • 8

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

相关问题