使用 shrink_to_fit() 释放向量向量中的内存

Posted

技术标签:

【中文标题】使用 shrink_to_fit() 释放向量向量中的内存【英文标题】:Using shrink_to_fit() for releasing memory in vector of vectors 【发布时间】:2020-02-09 09:12:25 【问题描述】:

假设我有std::vector<std::vector<int>> a(n, std::vector<int>(n, x));。 现在我想释放std::vector<std::vector<int>> 占用的所有内存。做就够了吗

a.clear();
a.shrink_to_fit();

还是我应该先对所有内部向量执行此操作?

【问题讨论】:

【参考方案1】:

主要做这件事就足够了。因此,将调用 inside-vector 的析构函数,而不仅仅是将大小调整为 0。

为所有内部向量执行此操作 - 您只是在为他完成编译器的工作。

您也可以在一行中完成:a = ;

【讨论】:

这不是编译器的工作,而是析构函数。并且内部向量的析构函数无论如何都会运行,即使向量在被销毁之前被清除。从技术上讲,将大小调整为 0 (a.resize(0)) 与 a.clear() 感谢您的回答。刚刚测试了a = ;,好像没有释放内存,因为a.capacity();显示了我的n @АлексейБрагин 这可能是一些调试优化。它肯定会释放内存。

以上是关于使用 shrink_to_fit() 释放向量向量中的内存的主要内容,如果未能解决你的问题,请参考以下文章

`resize` 是不是有降低向量容量的风险?

释放分配给二维向量的内存

堆上的整数向量和释放内存

在向量中使用擦除时双重释放或损坏(fasttop)。知道它们的索引,你怎么能擦除向量的几个项目?

从向量中擦除对象会导致双重释放[重复]

新向量的向量