2010-07-03 51 views
11

可能重复:
reduce the capacity of an stl vector
Is this normal behavior for a std::vector?强制一个std :: vector释放它的内存?

我知道,当你调用vector.clear()的标准::载体不 '自由' 的记忆,但我怎么能做这个?一旦清除它,我希望它释放所有资源,但我不想销毁它。

以下是现在正在发生的事情。 我有一个名为OGLSHAPE的类,我将它们推入它们的向量中。我希望一旦我做了shapevec.clear(),我就可以恢复所有的记忆,但只有3/4恢复了。我不是100%确定这是否是内存泄漏,所以我想释放所有资源以确保它不是泄漏。感谢

回答

13

使用swap特技:

#include <vector> 

template <typename T> 
void FreeAll(T & t) { 
    T tmp; 
    t.swap(tmp); 
} 

int main() { 
    std::vector <int> v; 
    v.push_back(1); 
    FreeAll(v); 
} 
+1

尼尔,有没有理由让你有'tmp'或者只是一个风格和个人喜好的问题? – sbi 2010-07-03 20:56:54

+0

@sbi两者:-)我认为它更清晰。 – 2010-07-03 20:59:29

+3

@尼尔:是的,我的措辞不好,我的意思是问是否有一个技术原因。无论如何,谢谢你的回答。我可能已经被_C Terseness Virus_毒害了,但我实际上更喜欢'std :: vector ().swap(v)'。 – sbi 2010-07-03 21:08:08

1

考虑使用交换技巧:

矢量(形状).swap(形状);