分享

【C++】new 与 malloc

 精品唯居 2022-12-23 发布于北京

关于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。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多