C++中malloc/free与new/delete区别

本博文源于《C++基础》,今天学习C++基础的时候,突然发现我在对这两个概念搞得不是很临清,故我将其转换为博文。旨在分辨malloc/free与new.delete的区别。

0. 参考书籍

传智播客高教产品研发部著.C++程序设计教程.北京:人民邮电出版社,2015.9

1.问题引出

请简述new/delete与malloc()/free()的区别

2.问题回答

malloc()/free()是c语言的标准库函数,new/delete是c++的运算符.new/delete 在实现上其实调用了malloc()与free()函数。然后又做了其他封装,相似与不同如下:

  • new创建对象时返回的是直接带类型信息的指针,而malloc()返回的都是void*类型指针
  • 两者在创建对象都可能造成内存泄漏,但new可以定位到哪个文件的哪一行,而malloc()没有这些信息
  • 对于非内置类型对象而言,new/delete在创建对象时不止是分配内存,还会自动执行构造函数进行初始化,对象消亡之前自动执行析构函数,而malloc()/free()只能简单地分配释放内存
  • new与malloc()申请内存位置不同,new从自由存储区(free store)分配,而malloc()从堆区(heap)分配
  • c++为了兼容C保持了malloc与free

3.如何记忆答案

答案是这样子说的,但记忆又是另外的道理,答案里五点,你就先对进行总述再分为细节, 你可以先讲解,C没有new与delete,c++有new有delete,c++为了兼容C保留了malloc与free,new与delete底层使用malloc和free ,然后进行分配内存方式进行回答 ,new分配在free store,而malloc分配在堆栈上面,再回答new的作用,可以初始化执行构造函数,delete也可以执行析构函数,而malloc和free不行, 最后就是返回类型数据 ,new返回特定类型,malloc返回void*

3.总结

本博文源于作者的现实遇到的一个学习问题,旨在进行陈述。通过在陈述的过程中,发现new/delete的底层就是调用了free/malloc函数,希望对此博文有需求的同学不要忘记收藏呀!

Guess you like

Origin blog.csdn.net/m0_37149062/article/details/121384772