c ++ noob here
假设我声明了一个矢量矢量,如:
vector<vector<vector<double> > > phi_x;
使用完毕后,如何销毁它以释放内存?
我已经阅读了其他一些网站,他们建议使用.clear()。根据我的理解,这只删除元素,但不释放矢量容量。我希望矢量完全被遗忘,就像它从未存在过一样。
此外,我目前的矢量应用程序的尺寸为54x54x9,我有大约12个这样的东西。这被认为是愚蠢的大?
答案 0 :(得分:9)
您无需做任何事情。只是让变量超出范围。
答案 1 :(得分:8)
如果你调用.clear()
,内部向量将被完全销毁。但是,最外面的向量可以保留它用于其向量数组(phi_x.size() * sizeof(vector<vector<double> >)
字节)的内存。要完全清除它并释放所有内存,请使用空向量进行交换:
phi_x.swap(vector<vector<vector<double> > >());
或者只是让phi_x
超出范围。
答案 2 :(得分:3)
使用完毕后,如何销毁它以释放内存?
让它超出范围。
我当前的矢量应用程序的尺寸为54x54x9,我有大约12个这样的东西。这被认为是愚蠢的大?
这取决于。如果它是用于具有64k内存的嵌入式平台,那么是的,它很大。如果是标准台式机,使用4G + RAM,则可以忽略它。
答案 3 :(得分:1)
您无需执行任何操作,析构函数将正确清理。
如果要在超出范围之前释放内存使用量,则可以在顶层清除。这不会重新分配顶部向量使用的内存,但会删除所有包含的向量,并且会在析构函数中释放它们的内存。
如果我正确计算,那就是大约100万个double类型的元素。假设一台现代PC作为一个并非愚蠢的平台。甚至非常大:)
答案 4 :(得分:0)
如果你的phi_x
变量是某个块内的某个局部变量,它将通过在块结束时调用析构函数来销毁它。
如果它是一个全局变量,它会在main
结束后失去作用。
答案 5 :(得分:0)
如果你的例子中显示了这个向量,则不需要进行任何额外的清理,析构函数一旦超出范围就会正确释放内存。
只要在退出中声明它的函数或它所在的对象被销毁,就会发生这种情况。
答案 6 :(得分:0)
析构函数将完成清理工作。除了让phi_x超出范围之外,你不必做任何事情。
{
vector<vector<vector<double> > > phi_x;
// do stuff with phi_x
}
// phi_x is gone here