new和malloc的区别

malloc与free是C++/C语言标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。
new可以认为是malloc加构造函数的执行。new出来的指针是直接带类型信息的。而malloc返回的都是void指针。

有了malloc/free为什么还要new/delete?

它们都可用于申请动态内存和释放内存。
malloc是库函数只能作用于内部数据类型,对于非内部数据动态对象而言,就不能完成对象的初始化与销毁,即执行构造函数与析构函数。
而new 与 delete此类运算符就能够在编译器的控制权限内完成,对象的初始化与销毁任务,即执行构造函数与析构函数

为什么C++不把malloc/free淘汰出局呢

这是因为C++程序经常要调用C函数;而C程序只能用malloc/free管理动态内存。

我们不要企图用malloc/free来 完成动态对象的内存管理, 应该用new/delete。由于内部数据类型的“对象”没有构造与析构的过程,对它们而言malloc/free和new/delete是等价的。

注意: 如果用free释放“new创建的动态对象”,那么该对象因无法执行析构函数而可能导致程序出错。

如果用delete释放“malloc申请的动态内存”,结果也会导致程序出错,但是该程序的可读性很差。所以new/delete必须配对使用,malloc/free也一样。

malloc 与 new 对于内存泄漏问题

内存泄漏对于malloc或者new都可以检查出来的,区别在于new可以指明是那个文件的那一行,而malloc没有这些信息。

参考:

https://blog.csdn.net/qq_26816591/article/details/52214313

原文链接: https://www.cnblogs.com/douzujun/p/8947588.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    new和malloc的区别

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/272927

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月14日 下午11:09
下一篇 2023年2月14日 下午11:09

相关推荐