new与malloc的区别

new与malloc的区别是一道经典的面试题,先整理一下,希望面试的时候能用到。

new与malloc的区别

0、new/delete是运算符,需要编译器支持;malloc/free是库函数,需要头文件支持。

1、new分配内存是按照数据类型分配,不需要指定内存块的大小;malloc分配内存是按照指定内存大小进行分配。

2、new在分配内存的过程中还回调用构造函数,delete释放空间时会调用析构函数;malloc/free在分配空间的之后不会调用构造函数和析构函数。
补充new的实现原理:①创建一个新的对象;②将构造函数的作用域赋值给这个新的对(因此this指向了这个新的对象);③执行构造函数中的代码(为这个新对象添加属性);④返回新对象

3、new的返回值类型是指定对象的指针;malloc的返回值类型是void *,所以malloc的返回值一般需要进行类型转化。

4、new内存分配失败时会抛出异常(bad_alloc);malloc内存分配失败返回NULL。因此在使用new时经常会使用try…catch语法,而malloc则判断指针的返回值,而为了兼容c程序员的习惯,经常采用new nothrow的方法禁止抛出异常而返回NULL。

5、new会先调用operator new函数申请足够的内存(通常底层使用malloc现)。然后调用类型的构造函数,初始化成员变量,最后返回自定义类型指针。delete先调用析构函数,然后调用operator delete函数释放内存(通常底层使用free实现);malloc/free是库函数,只能动态的申请和释放内存,无法强制要求其做自定义类型对象进行构造和析构函数。

6、new和new[]的区别:new[]一次性分配所有内存,多次调用构造函数,分别搭配使用delete和delete[](delete[]多次调用析构函数,销毁数组中的每个对象);malloc只能使用 sizeof(int) * n;

7、new操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存(自由存储区不等于堆)。

8、malloc在分配内存不够的情况下可以使用realloc进行扩容;new没有这样的操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值