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
版权声明:本文为博主原创文章,转载请附上博文链接!