new、delete与malloc、free
2016-07-21 18:18
204 查看
一、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如果分配不成功的话,会返回一个空指针。
程序运行时,计算机的内存被分为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如果分配不成功的话,会返回一个空指针。
相关文章推荐
- Android View 点击事件的分发机制
- Java 多线程:Lock接口(接口方法分析,ReentrantLock,ReadWriteLock 3ff8
- ios PJSIP(PJSUA)
- CodeForces 604A Uncowed Forces
- Leetcode 342. Power of Four (Easy) (cpp)
- Postfix的使用与分析
- NYOJ 973 SPFA判环
- svn使用经验
- 爬虫例子——多页、函数模板
- iOS - is missing from working copy
- Java微信浏览器上传文件使用Base64方法(增加压缩上传方法)
- c# web 常见问题解决方法
- 回调机制
- UCloud 活动
- debug安卓屏幕滑动会抖动
- 数据库sql 查询列属性 增加列 修改列长度 建表 自增
- 三步实现mybatis自定义的typehandler
- 进入ubuntu终端
- clauch svn使用设置
- CodeForces 612A The Text Splitting