打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【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。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
[收藏]C++ Tips(2)
C++中placement new操作符
深入理解C new/delete, new []/delete[]动态内存管理(转)
内存管理(整理笔记)
C++中对于结构体的内存分配问题
高质量C/C++编程(片段)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服