强制std::vector释放其内存?

14
我知道std::vectors在调用vector.clear()时不会“释放”内存,但我该如何做到呢?我希望一旦我清空它,它能释放所有资源,但又不想销毁它。
目前的情况是这样的。我有一个叫做OGLSHAPE的类,我将它们推入一个向量中。我希望一旦我执行shapevec.clear(),我能够获得所有的内存回收,但实际上只回收了其中的3/4。我不确定这是否是一个内存泄漏,所以我想要释放所有的资源以确保它不是一个泄漏。谢谢。
2个回答

16

使用交换技巧:

#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
@sbi 两个都可以 :-) 而且我认为这更清晰。 - anon
3
@Neil:是的,我的措辞很糟糕,我想问的是是否存在技术原因。无论如何,感谢你的回答。我可能被“C语言简洁性病毒”所影响,但我实际上更喜欢std::vector<T>().swap(v) - sbi

2
考虑使用交换技巧:
std::vector<Shape>().swap(shapes);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接