[英]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>
方法和析构函数。 数据将在作用域(功能或程序)的末尾释放。
因此,您的问题的答案将是:您不需要调用clear
或swap
。
由于上述问题中的vector<int>
对象是具有automatic
存储的变量-因此,超出范围时将被自动销毁。 当容器对象超出范围时,将调用其析构函数,该析构函数进而释放用于存储所包含元素的空间,并且在此步骤中,还将针对所有所包含元素调用析构函数(在用户定义类型的情况下)。 因此,如果我们仅计划int
元素,则无需执行任何其他操作。 但是如果如果T*
包含类型,则我们将发生内存泄漏,其中T
是某些用户定义的类型,因为在这种情况下,不会为指向对象显式调用析构函数。
您关于内存泄漏的说法使问题的整体含义不清楚。 当向量超出范围时,将释放内存。 应该没有内存泄漏。
在大型项目中,通常需要一个向量在超出范围之前在某个点释放其分配。 失败不是内存泄漏,而是一个问题。 为此, .clear()
是无用的。 您建议的swap
方法(不带.clear
)有效。 没有swap
我不知道有什么办法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.