malloc/free 和 new/delete的区别

2019-03-19  本文已影响0人  mingzhi618

malloc/free 和 new/delete的区别?

相同点:都是从堆上申请空间,用户需要自己来管理。

不同点:

1.所属语言

new是C++特性,malloc是C的。C++一般使用的new,但也可以使用malloc,而C用malloc、realloc、calloc。

2.申请释放方式

new和delete,malloc和free配对使用。new的使用比malloc简单,内部已经实现了大小的计算、类型转换等工作,而malloc使用时需要计算大小及进行类型转换。

3.malloc是标准库函数,new是C++的运算符。

new可以被重载,但malloc不可以,malloc需要库函数的支持,new不需要。

4.构造与析构

new和delete会自动调用构造函数和析构函数,但是malloc和free不会。

5.申请内存失败

申请内存失败,默认new抛出异常,malloc返回NULL。

6.重新分配内存

malloc可利用realloc重新分配内存,new不可以。

7.类型安全性

new会检查类型是否对应,如果不对应会保存,但malloc只关注申请内存的多少,不会检查类型。

8.类型转换

malloc返回的类型是void,所以在调用malloc时要进行显式的类型转换,将void转换成所需的指针类型,new不需要。

9.数组分配

new有明确的方式处理数组的分配,即new[],释放也有delete[],malloc没有。

10.设置内存分配器

new可以设置自己的内存分配器,malloc不可以。

---------------------

作者:ZWE7616175

来源:CSDN

原文:https://blog.csdn.net/ZWE7616175/article/details/80330800

版权声明:本文为博主原创文章,转载请附上博文链接!

上一篇下一篇

猜你喜欢

热点阅读