【C++】new 与 malloc

关于new,这一篇文章较好,较明白得解释了operator new 和 new operator。

https://blog.csdn.net/nishisiyuetian/article/details/81702180

 

new和malloc的区别

 

new(这里是new operator)的功能是在堆区新建一个对象,并返回该对象的指针(类型是该对象类型)。new操作符在生成一个对象的时候一般分两步,调用operator new0函数分配内存(有的编译器会在未重载operator new的时候用malloc实现 operator new),然后再用构造函数初始化对象。

所谓的【新建对象】的意思就是,将调用该类的构造函数,因为如果不构造的话,就不能称之为一个对象。同样的,用delete去释放一个堆区的对象,会调用该对象的析构函数。

 

而malloc只是机械的分配一块内存(类型是void*),如果用mallco在堆区创建一个对象的话,是不会调用构造函数的严格说来用malloc不能算是新建了一个对象,只能说是分配了一块与该类对象匹配的内存而已,与构造函数无关。用free去释放一个堆区的对象,当然不会调用该对象的析构函数。

  
参考链接:https://www.zhihu.com/question/30115922/answer/46860025
 
另外new内存分配失败时,会抛出bac_alloc异常,它不会返回NULL;malloc分配内存失败时返回NULL。
posted @   nntzhc  阅读(107)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示