创建一个向量:
std::vector<int> pqrs;
以正确的方式删除以释放函数内的所有内存(防止内存泄漏和其他与内存相关的问题):
pqrs.clear();
std::vector<int>().swap(pqrs);
我的问题是:需要清除和交换(比如调用析构函数)?或交换足以满足各种目的。
答案 0 :(得分:2)
如果是std::vector<int>
,您不需要clear()
也可以swap
来释放内存,因为此处的std::vector<int>
元素(int
s )由std::vector<int>
方法和析构函数自动分配和释放。数据将在范围(功能或程序)结束时释放。
因此,回答您的问题是,您无需致电clear
或swap
。
答案 1 :(得分:1)
由于上述问题中的vector<int>
对象是一个带有automatic
存储的变量 - 因此当它超出范围时会自动销毁。当容器对象超出范围时,会调用析构函数,从而释放用于存储所包含元素的空间,在此步骤中,还会调用所有包含元素的析构函数(如果是用户定义的类型)。因此,如果我们只计划int
元素,则无需做任何额外的事情。但是如果包含类型if T*
,T
是某些用户定义的类型,那么我们就会有内存泄漏,因为在这种情况下,不会为指向对象显式调用析构函数。
答案 2 :(得分:0)
关于内存泄漏的短语使得问题的全部含义都不清楚。当向量超出范围时,将释放内存。应该没有内存泄漏。
在主要项目中,通常需要一个向量来在之前释放其分配,然后超出范围。不这样做不是内存泄漏,但可能是一个问题。为此,.clear()
没用。您建议的swap
方法(没有.clear
)有效。如果没有swap
,我不知道如何做到这一点。