new、delete与malloc、free
来源:互联网 发布:文明6 mac版 编辑:程序博客网 时间:2024/06/06 14:09
一、new和delete
程序运行时,计算机的内存被分为4个区域:程序代码区,全程数据区,栈和堆。其中堆上的内存可以被用户自由分配和释放。C语言中提供了malloc(还有calloc和realloc)和free函数来进行动态内存管理。C++中则提供了new和delete运算符来进行动态内存管理。因为new和delete是运算符,所以性能要更高效(没有函数调用时的开销),使用更灵活。
1、用new分配内存的基本形式
指针变量名=new 类型;
在程序执行过程中,运算符new从堆上分配一块与类型字节数相等的内存空间,并将这块空间的首地址存到指针变量中。
例:
char *p;
p=new char; //new动态分配存放一个字符的空间,并将这块空间的首地址赋给p
运算符delete用于释放运算符new分配的的存储空间。其基本形式为:
delete 指针变量名;
delete p; //将new分配的空间进行释放
2、用new为数组动态内存分配,这时需要在类型名后面加上数组的大小。其形式如下:
指针变量名=new 类型名[数组大小];
例:
int *p=new int[5]; //new分配了一个有5个元素的整型数组
释放动态分配的数组存储区时,可以使用delete运算符。其形式如下:
delete []指针变量名; //指针变量名前加一对[],无需指定大小,表示释放的是数组
例:delete []p; //释放了new开辟的具有5个元素的整型数组
3、用new在为简单变量进行分配空间的同时,可以进行初始化。其形式如下:
指针变量名=new 类型名(初始值);
例:int *p;
p=new int(20); //分配一个整型,并将20作为这块空间的初始值
注意:运算符new不能对动态分配的数组存储区进行初始化。
二、new、delete和malloc、free的异同。
1、运算符new可以自动计算所要分配的空间的大小。
2、new能够自动返回正确的指针类型,不需要用户对返回指针进行强制类型转换。
3、new是运算符,效率更高。
4、new分配的空间只能用显示的用delete释放。否则会发生内存泄漏。
5、new如果分配不成功的话,会返回一个空指针。
1 0
- malloc/free与new/delete
- malloc/free与new/delete
- New/delete与malloc/free
- malloc/free 与new/delete
- malloc/free 与 new/delete
- malloc/free 与new/delete
- malloc/free与new/delete
- malloc/free与new/delete
- malloc+free与new+delete
- malloc/free与new/delete
- malloc、free与new、delete
- new/delete ,malloc与free
- malloc/free与new/delete
- malloc/free与new/delete
- malloc&free与new&delete
- new、delete与malloc、free
- malloc/free与 new/delete
- malloc/free与new/delete
- NGUI根据图片是否透明来决定是否可以点中
- 线程池的理解
- 飞凌Fl2440开发板蜂鸣器pwm的驱动
- 解决font-face跨域办法
- 2016 Multi-University Training Contest 2(2016多校训练第二场)1009
- new、delete与malloc、free
- clauch svn使用设置
- androidStudio没有httpclient的解决办法
- iOS 如何获取应用当前的控制器 UIWindow & UIWindowLevel笔记
- 数据库sql 查询列属性 增加列 修改列长度 建表 自增
- HDOJ 1164Eddy's research I(质因数分解)
- 进入ubuntu终端
- CodeForces 604A Uncowed Forces
- 回调机制