1、生存空间和生存范围
看下面代码:
vector<int> fibon_seq(int size) { if(size <= 0 || size >= 1024) { size = 8; } vector<int> elems(size); for(int ix = 0; ix < size; ++ix) { if( ix == 0 || ix == 1) elems[ix] = 1; else elems[ix] = elems[ix-1] + elems[ix-2]; } return elems; }
分析:不论以pointer 或reference 形式将elems返回都不正确,因为elems在fibon_seq()方法执行完毕时已不复存在。如果将elems以传值方式返回,便不会存在任何问题;因为返回的是对象的复制品,它在函数之外依然存在。
2、动态内存管理
动态内存分配来自堆(heap)内存,new and delete
例如:
int *pi; pi = new int; pi = new int(1024);
注意:默认情况下,由heap配置而来的对象,皆未经过初始化。最后一行代码才是经过初始化的。
当用delete 删除内存时,无需检验是否存在内存,如:
int *pia = new int[24]; if(pia != 0) //多此一举 delete [] pia;
3、使用局部静态对象
事实上,