malloc/free与 new/delete

malloc和free详见《C和指针》P221;

new详见《C++primer》P423

另:参考各位大神的整理吐舌头

简答题:malloc/free与 new/delete的区别是什么?(10分)

1、运算符new可以自动计算所要分配的空间的大小。
2、new能够自动返回正确的指针类型,不需要用户对返回指针进行强制类型转换。
3、new是运算符,效率更高。
4、new分配的空间只能用显示的用delete释放。否则会发生内存泄漏。
5、new如果分配不成功的话,会返回一个空指针。
计算机的内存被分为4个区域:
程序代码区
全程数据区
堆(堆上的内存可以被用户自由分配和释放)
C中提供了malloc(calloc和realloc)和free函数来进行动态内存管理。
C++中提供了new和delete运算符来进行动态内存管理。
new和delete是运算符,所以性能要更高效(没有函数调用时的开销),使用更灵活。

用new分配内存的基本形式: 指针变量名=new 类型;( 运算符new从堆上分配一块与类型字节数相等的内存空间,并将这块空间的首地址存到指针变量中。)
eg:
    char *p;
    p=new char; 
//new动态分配存放一个字符的空间,并将这块空间的首地址赋给p
 运算符delete用于释放运算符new分配的的存储空间。其基本形式为:
    delete 指针变量名;
    delete p;        
//将new分配的空间进行释放

用new为数组动态内存分配,这时需要在类型名后面加上数组的大小。其形式如下:
      指针变量名=new 类型名[数组大小];
   例:
     int *p=new int[5];    
 //new分配了一个有5个元素的整型数组
  释放动态分配的数组存储区时,可以使用delete运算符。其形式如下:
     delete []指针变量名;   
//指针变量名前加一对[],无需指定大小,表示释放的是数组
    例:delete []p;    
//释放了new开辟的具有5个元素的整型数组

用new在为简单变量进行分配空间的同时,可以进行初始化。其形式如下:
      指针变量名=new 类型名(初始值);
   例:int *p;
     p=new int(20);   
 //分配一个整型,并将20作为这块空间的初始值
注意:运算符new不能对动态分配的数组存储区进行初始化。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值