C++中new/delete和malloc/free的区别

来源:互联网 发布:淘宝店铺导航css代码 编辑:程序博客网 时间:2024/06/05 11:37

相同点:都是运行时申请动态内存和释放内存

不同点:1、返回类型安全性:new返回对象类型的指针,类型严格与对象匹配,无需进行类型转换;malloc返回void*,需要强制转换为需要的类型

2、内存分配失败的返回值:new动态内存分配失败时,会抛出bad_alloc异常,而malloc分配失败时会返回NULL

3、是否需要指定内存大小:new运算符无需指定,编译器自动计算大小;malloc需要人工指定需要分配的内存大小

4、是否调用构造/析构函数:new的执行过程:分配原始内存->构造函数->返回指针,而malloc不会调用构造函数

5、是否可以被重载:new/delete可以被重载,malloc/free不可以被重载

6、能否直观重新分配内存:使用malloc分配内存后,如果使用过程发现内存不够用,可以使用realloc重新分配内存,如果当前位置有可用的内存,直接扩充,如果当前位置没有可用内存或者可用内存不够,找另一块内存,复制数据,释放原内存;而new只能重新另找一块内存,复制数据,释放原内存。

7、new/free是运算符,而malloc/free是库函数。

另:对于基本类型的数组,delete [ ] a和delete a是等价的,但是对于自定义数据类型来说,不等价。比如:int *a=new int[5],则delete a<->delete [ ] a