Chinaunix首页 | 论坛 | 博客
  • 博客访问: 53187
  • 博文数量: 23
  • 博客积分: 40
  • 博客等级: 民兵
  • 技术积分: 111
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-24 17:29
文章分类
文章存档

2013年(3)

2012年(20)

分类:

2012-09-25 11:20:12

原文地址:malloc和new的区别 作者:haiyangcqu

摘要:本文记述了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. 两者都必须要成对使用。
阅读(918) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~