摘要:本文记述了malloc()/free()和new/delete的区别。
malloc()和new()都可以用于动态申请内存,free和delete都可以用于动态释放内存,malloc()和free()只能应用于原子类型数据内存的动态分配与释放,对于对象等非原子类型(即非内部数据类型)内存的分配与释放则需要new和delete,对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数,由于malloc()/free()是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc()/free();
new 初始化对象,调用对象的构造函数,对应的delete调用相应的析构函数,malloc()仅仅分配内存,free()仅仅回收内存。
malloc()函数原型如下:
- void * malloc ( size_t size );
free()函数原型如下:
- void free ( void * ptr );
new和delete用法举例如下:
- int *a = new int;
- delete a; //释放单个int的空间
- int *a = new int[5];
- delete [] a; //释放int数组空间
总结:
- malloc()/free()是C/C+的内存分配符,new /delete是C++的内存分配符;
- 注意:malloc()/free()是库函数,new/delete是运算符;
- malloc()/free()不能执行构造函数与析构函数,而new/delete可以;
- new/delete不能在C上运行,所以malloc()/free()不能被淘汰;
- 两者都必须要成对使用。