new和malloc¶
c++有堆内存和栈内存之分。本来全部都是堆内存,栈内存的出现:花一点点 cpu 的时间,极大缩短开发时间和实现内存自动管理。
new
和malloc
都是分配在堆内存上,完成手动申请和手动释放。两者主要区别:
要不是面试问,谁会管他们俩属性什么的区别啊。。。。。。
- 属性
new
是关键字(编译器支持),malloc
是库函数(头文件支持)。 - 参数
new
无需指定大小,malloc
需要指定大小。 - 返回类型
new
返回类型是对象指针,malloc
- 对于自定义的类
new
会调用构造和析构函数,malloc
不会调用构造和析构函数 - 分配失败
new
会抛出异常,malloc
返回空 - 内存泄露
两者都能检测到,new
可以检查到哪一行,malloc
不行。