一、new用法
使用new运算符时必须已知数据类型,new运算符会向系统堆区申请足够的存储空间,如果申请成功,就返回该内存块的首地址,动态分配失败,则返回一个空指针(NULL)。
new运算符返回的是一个指向所分配类型变量(对象)的指针。对所创建的变量或对象,都是通过该指针来间接操作的,而动态创建的对象本身没有标识符名
一般使用格式:
格式1:指针变量名=new 类型标识符;
例子:int *a = new int; 开辟一个存放整数的存储空间,返回一个指向该存储空间的地址赋值给a
格式2:指针变量名=new 类型标识符(初始值);
int *a = new int(100); 开辟一个存放整数的存储空间,返回一个指向该存储空间的地址赋值给a,并给这个地址初始化
格式3:指针变量名=new 类型标识符 [内存单元个数]; 开辟数组空间
int *a = new int[5]; 开辟具有5个元素的整型数组
int **a = new int[5][6]; 开辟一个二维空间
二、delete 删除空间
1. 删除单变量地址空间
int *a = new int;
delete a; //释放单个int的空间
2. 删除数组空间
int *a = new int[5];
delete []a; //释放int数组空间
使用注意事项
指针删除与堆空间释放。删除一个指针p(delete p;)实际意思是删除了p所指的目标(变量或对象等),释放了它所占的堆空间,而不是删除p本身(指针p本身并没有撤销,它自己仍然存在,该指针所占内存空间并未释放),释放堆空间后,p成了空指针
动态分配的变量或对象的生命期。我们也称堆空间为自由空间(free store),但必须记住释放该对象所占堆空间,并只能释放一次,在函数内建立,而在函数外释放,往往会出错
个人:new申请的空间,没有全局、局部之分,在delete之前始终存在