资讯专栏INFORMATION COLUMN

【C++】malloc/free和new/delete的区别

jerry / 1525人阅读

摘要:全局开内存先构造函数后若开辟空间失败,会抛异常析构函数先全局释放内存后这体现了封装不是运算符重载,是调用全局函数,而函数里面包含了此外,和能够进行专属类重载,也就是说,比如类,我们调用开辟,如果有专属类重载,那会找到重载了

new = 全局operator new开内存(先) + 构造函数(后)
operator new = malloc ,若开辟空间失败,会抛异常

delete = 析构函数(先) + 全局operator delete释放内存(后)
operator delete = free

这体现了封装
operator new/delete 不是运算符重载,是调用全局函数,而函数里面包含了malloc/free

此外,operator new和operator delete能够进行专属类重载,也就是说,比如类A,我们调用new开辟A,如果A有专属类重载,那new会找到重载了的类专属的operator new,而不是全局的::operator new;
这可以用在我们不想用malloc开辟空间的时候
::表示全局域

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/123353.html

相关文章

  • C++内存管理

    摘要:对于申请内存失败,的处理是返回空指针,而的处理是抛异常对于自定义类型,会调用其构造析构函数,而不会。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。 ...

    mudiyouyou 评论0 收藏0
  • C语言C++区别联系

    摘要:我们来介绍语言和中的区别和联系。语言没有函数重载,支持函数重载。语言中产生函数符号的规则是根据名称产生,这也就注定了语言不存在函数重载的概念。简单来说,它和普通变量的区别只是不能做左值而已。需要注意的是,的指针有可能退化成语言的指针。 C语言虽说经常和C++在一起被大家提起,但可千万不要以为...

    kid143 评论0 收藏0

发表评论

0条评论

jerry

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<