​ inline函数必须在头文件中定义吗? ​


如果一个inline函数会在多个源文件中被用到,那么必须把它定义在头文件中



释放vector内存的两种方法


经常听见有人说vector内存是不可以释放的。实际上这是一种误解,

下面提供两种方法,各有千秋:

C/C++ code​​?​

1 2 3

​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​​?​

1

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



我还记得这个论坛上有人问为什么要把swap写成成员函数,而不直接调用std::swap,其原因在于封装。

也就是假如需要交换的变量是有3个,那么std::swap要写成3次:

如:


C/C++ code​​?​

1 2 3 4 5

​void​​​​swap(vector<_Tp, _Alloc>& __x) {​​​​​​​​__STD::swap(_M_start, __x._M_start);​​​​//一次​​​​​​​​__STD::swap(_M_finish, __x._M_finish);​​​​//二次​​​​​​​​__STD::swap(_M_end_of_storage, __x._M_end_of_storage);​​​​//三次​​​​​​​​}​



而且,在类外面的swap是无法调用类的私有成员的。swap还具有一个非常重要的优点——不抛出异常。


​C++ STL中的vector的内存分配与释放​



一个奔跑的程序员