new和delete动态分配和撤销内存

视频:C++引用及new和delete的使用

一、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之前始终存在

上一篇:html5图片异步上传/ 表单提交相关


下一篇:saltstack安装配置使用记录