C++ 如何正确销毁c++;向量的向量与释放内存

C++ 如何正确销毁c++;向量的向量与释放内存,c++,memory-leaks,vector,C++,Memory Leaks,Vector,可能重复: 这里是c++noob 假设我声明一个向量向量,如: vector<vector<vector<double> > > phi_x; 向量phi_x; 使用完毕后,如何销毁它以释放内存? 我读过一些其他网站,他们建议使用.clear()。据我所知,这只会删除元素,但不会释放向量容量。我希望向量被完全遗忘,就像它从未存在过一样 另外,我目前应用的向量维数是54x54x9,我得到了其中的12个。这被认为是愚蠢的大问题吗?你什么都不用做。只需让变量超

可能重复:

这里是c++noob

假设我声明一个向量向量,如:

vector<vector<vector<double> > > phi_x;
向量phi_x;
使用完毕后,如何销毁它以释放内存?

我读过一些其他网站,他们建议使用.clear()。据我所知,这只会删除元素,但不会释放向量容量。我希望向量被完全遗忘,就像它从未存在过一样


另外,我目前应用的向量维数是54x54x9,我得到了其中的12个。这被认为是愚蠢的大问题吗?

你什么都不用做。只需让变量超出范围。

如果您的
phi_x
变量是某个块中的某个局部变量,它将通过在块末尾调用其析构函数来销毁

{
    vector<vector<vector<double> > > phi_x;

    // do stuff with phi_x
}
// phi_x is gone here
如果它是一个全局变量,它将在
main
结束后被释放

在我使用完它之后,如何销毁它以释放内存

就让它超出范围吧

{
    vector<vector<vector<double> > > phi_x;

    // do stuff with phi_x
}
// phi_x is gone here
我目前应用的向量维数是54x54x9,我得到了其中的12个。这被认为是愚蠢的大吗

视情况而定。如果是一个64k内存的嵌入式平台,那么是的,它很大。如果是标准桌面PC,使用4G+RAM,则可以忽略它。

如果调用
.clear()
,内部向量将被完全销毁。但是,最外层的向量可能会保留其用于向量数组的内存(
phi_x.size()*sizeof(vector)
bytes)。要完全清除并释放所有内存,请使用空向量交换:

phi_x.swap(vector<vector<vector<double> > >());
phi_x.swap(vector());

或者干脆让phi_x超出范围。

如果该向量如示例所示,则无需进行任何额外清理,析构函数将在其超出范围后立即正确释放内存

{
    vector<vector<vector<double> > > phi_x;

    // do stuff with phi_x
}
// phi_x is gone here

一旦在函数中声明它,或者如果它所在的对象被销毁,就会发生这种情况。

析构函数将为您完成清理工作。你不必做任何事,只要让phi_x超出范围

{
    vector<vector<vector<double> > > phi_x;

    // do stuff with phi_x
}
// phi_x is gone here
{
向量phi_x;
//用phi_x做些事情
}
//phi_x在这里消失了

您不必做任何事情,析构函数将正确清理

如果您想在内存使用量超出范围之前释放内存使用量,则可以在顶层进行cal clear。这不会重新分配顶部向量使用的内存,但会删除所有包含的向量,并释放析构函数中的内存


如果我计算正确的话,大约有一百万个元素是double类型的。假设一台现代个人电脑作为一个平台,并不是愚蠢的大。甚至非常大:)

我明白了,但是分配给向量的内存是否会减慢后面代码的运行速度。@KeenanZ不太可能。配置您的代码以查看。无论哪种方法,你都可以在每个向量的使用周围添加一个嵌套的块范围。但这是一个向量向量向量向量,这是一个非常不同的问题