您的位置:首页 > 编程语言 > C语言/C++

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

2017-07-10 21:16 281 查看
相同点:都是运行时申请动态内存和释放内存

不同点: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: