Chinaunix首页 | 论坛 | 博客
  • 博客访问: 894796
  • 博文数量: 60
  • 博客积分: 1458
  • 博客等级: 中尉
  • 技术积分: 1373
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-24 12:50
个人简介

不积硅步无以至千里

文章分类

全部博文(60)

分类: C/C++

2012-09-18 23:05:15

摘要:本文记述了malloc()/free()和new/delete的区别。

malloc()和free()是库函数,在使用的时候需要包含相应的头文件,而new和delete是运算符,可以直接使用的;

malloc()和new()都可以用于动态申请内存,free和delete都可以用于动态释放内存,malloc()和free()只能应用于原子类型数据内存的动态分配与释放,对于对象等非原子类型(即非内部数据类型)内存的分配与释放则需要new和delete,对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数,由于malloc()/free()是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc()/free();

new 初始化对象,调用对象的构造函数,对应的delete调用相应的析构函数,malloc()仅仅分配内存,free()仅仅回收内存。

malloc()函数原型如下:

  1. void * malloc ( size_t size );
其中void* 是一个空指针类型,使用void*的原因是可将其转换为任意指针类型,函数返回指针。函数参数中size指的是字节数。

free()函数原型如下:

  1. void free ( void * ptr );
函数参数为指针,返回值为空。

new和delete用法举例如下:

  1. int *a = new int;

  2. delete a; //释放单个int的空间

  3. int *a = new int[5];

  4. delete [] a; //释放int数组空间

总结:
  1. malloc()/free()是C/C+的内存分配符,new /delete是C++的内存分配符;
  2. 注意:malloc()/free()是库函数,new/delete是运算符
  3. malloc()/free()不能执行构造函数与析构函数,而new/delete可以;
  4. new/delete不能在C上运行,所以malloc()/free()不能被淘汰;
  5. 两者都必须要成对使用。
阅读(3340) | 评论(5) | 转发(6) |
给主人留下些什么吧!~~

haiyangcqu2012-09-25 20:32:30

liuyang890710: .....

liuyang8907102012-09-25 11:20:25

haiyangcqu2012-09-20 18:52:34

物讯网: 授教了.....
互相学习,共同进步

物讯网2012-09-20 15:44:13

授教了

5407225732012-09-19 09:35:39

猎头职位推荐:嵌入式软/硬件架构师,工作地点深圳 待遇32W-43W/年,各位做嵌入式电子产品的朋友都可以看,有兴趣者请联系:E-mail: z242086@vastsea.com ,QQ: 2425886002。