malloc和new的区别

715阅读 0评论2012-09-25 liuyang890710
分类:

摘要:本文记述了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. 两者都必须要成对使用。
上一篇:java中的一些概念的认识
下一篇:malloc和new的区别