如何从内存中清除 C 中的向量

新手上路,请多包涵

我是 C++ 新手,所以这可能是一个新手问题,但是我并不完全清楚如何从内存中清除它。我在网上搜索并查看了几个答案,但不清楚如何正确执行我试图做的事情。

如何在 C++ 中正确地从内存中清除我的向量?谢谢,如果这是一个重复的帖子,我很抱歉。

 vector<ElementData> Elements;

正如下面的评论所提到的,我也想返回使用的内存。

除了它不会将任何内存返回给系统,因为容量保持不变。

原文由 JokerMartini 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 533
2 个回答

如果您想将向量重置为空状态,那么我们可以使用 swap 技巧将向量的内容交换为将被销毁并释放内存的临时对象

vector<ElementData> Elements
// fill the vector up
vector<ElementData>().swap(Elements);

这将创建一个临时的空向量,将其与您拥有的向量交换,因此现在它是空的,然后销毁临时向量中的所有内容。

你可以在这个小例子中看到它的工作原理

int main() {
    std::vector<int> foo(500);
    std::cout << foo.capacity() << std::endl;
    std::vector<int>().swap(foo);
    std::cout << foo.capacity() << std::endl;
}

现场示例

原文由 NathanOliver 发布,翻译遵循 CC BY-SA 3.0 许可协议

你不必做任何特别的事情。由于向量和里面的元素都是静态分配的(即不是由new创建的),当向量超出范围时,它会被释放并且析构函数会在里面的所有ElementData上被调用。如果您将拥有 vector<ElementData*> ,其中向量仅包含指向 ElementData 的指针,那么您还必须自己拥有 delete 所有 ElementData。

原文由 Oskar Hýbl 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏