繁体   English   中英

在C ++中删除和释放向量内存的正确方法(防止与内存相关的错误)

[英]Proper way to delete and free up memory of a vector (prevent different memory related errors) in c++

创建向量:

std::vector<int> pqrs;

以适当的方式删除以释放函数内的所有内存(防止内存泄漏和其他与内存相关的问题):

pqrs.clear();
std::vector<int>().swap(pqrs);

我的问题是:既需要清除又需要交换(例如调用析构函数)? 或交换足以满足所有目的。

std::vector<int>情况下,您无需执行clear()swap到空闲内存,因为std::vector<int>元素( int s)是由std::vector<int>自动分配和释放的std::vector<int>方法和析构函数。 数据将在作用域(功能或程序)的末尾释放。

因此,您的问题的答案将是:您不需要调用clearswap

由于上述问题中的vector<int>对象是具有automatic存储的变量-因此,超出范围时将被自动销毁。 当容器对象超出范围时,将调用其析构函数,该析构函数进而释放用于存储所包含元素的空间,并且在此步骤中,还将针对所有所包含元素调用析构函数(在用户定义类型的情况下)。 因此,如果我们仅计划int元素,则无需执行任何其他操作。 但是如果如果T*包含类型,则我们将发生内存泄漏,其中T是某些用户定义的类型,因为在这种情况下,不会为指向对象显式调用析构函数。

您关于内存泄漏的说法使问题的整体含义不清楚。 当向量超出范围时,将释放内存。 应该没有内存泄漏。

在大型项目中,通常需要一个向量在超出范围之前在某个点释放其分配。 失败不是内存泄漏,而是一个问题。 为此, .clear()是无用的。 您建议的swap方法(不带.clear )有效。 没有swap我不知道有什么办法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM