[C++] vector 释放内存方法

【转】 http://topic.csdn.net/u/20091202/15/817018d4-e0fc-4229-94b7-0869c9366a53.html

经常听见有人说vector内存是不可以释放的。实际上这是一种误解,
下面提供两种方法,各有千秋:

C/C++ code

int a[10] = {12,3,45,6,7,2,45,5,2,10}; vector<int> S(a,a+10); S.swap(vector<int>());

这是利用swap函数,和临时对象交换,使S对象的内存为临时对象的内存一样,而临时
对象的内存为S对象的内存。交换以后,临时对象消失,释放内存。不是传统所说的,程序退出才释放内存。
这可以调试跟踪一下。而且我们为了调整S的容纳3个元素,可以这样写:
C/C++ code

S.swap(vector<int>(3));

我还记得这个论坛上有人问为什么要把swap写成成员函数,而不直接调用std::swap,其原因在于封装。
也就是假如需要交换的变量是有3个,那么std::swap要写成3次:
如:
 
C/C++ code

cout << "Hello"; // 此行屏幕不要输出 cout << endl; // 此行屏幕才输出

而且,在类外面的swap是无法调用类的私有成员的。swap还具有一个非常重要的优点——不抛出异常。
另外一种释放的方法,就很少人用了:
C/C++ code

vitS; int* p = S.get_allocator().allocate(10); S.get_allocator().deallocate(p,10);
posted on 2011-10-17 22:30  applesun0757  阅读(277)  评论(0)    收藏  举报