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

时间:2015-12-30 10:00:47

标签: c++ vector memory-leaks

创建一个向量:

std::vector<int> pqrs;

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

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

我的问题是:需要清除和交换(比如调用析构函数)?或交换足以满足各种目的。

3 个答案:

答案 0 :(得分:2)

如果是std::vector<int>,您不需要clear()也可以swap来释放内存,因为此处的std::vector<int>元素(int s )由std::vector<int>方法和析构函数自动分配和释放。数据将在范围(功能或程序)结束时释放。

因此,回答您的问题是,您无需致电clearswap

答案 1 :(得分:1)

由于上述问题中的vector<int>对象是一个带有automatic存储的变量 - 因此当它超出范围时会自动销毁。当容器对象超出范围时,会调用析构函数,从而释放用于存储所包含元素的空间,在此步骤中,还会调用所有包含元素的析构函数(如果是用户定义的类型)。因此,如果我们只计划int元素,则无需做任何额外的事情。但是如果包含类型if T*T是某些用户定义的类型,那么我们就会有内存泄漏,因为在这种情况下,不会为指向对象显式调用析构函数。

答案 2 :(得分:0)

关于内存泄漏的短语使得问题的全部含义都不清楚。当向量超出范围时,将释放内存。应该没有内存泄漏。

在主要项目中,通常需要一个向量来在之前释放其分配,然后超出范围。不这样做不是内存泄漏,但可能是一个问题。为此,.clear()没用。您建议的swap方法(没有.clear)有效。如果没有swap,我不知道如何做到这一点。