摘要:本文记述了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()函数原型如下:
- void * malloc ( size_t size );
其中void* 是一个空指针类型,使用void*的原因是可将其转换为任意指针类型,函数返回指针。函数参数中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()不能被淘汰;
- 两者都必须要成对使用。
阅读(3372) | 评论(5) | 转发(6) |