c++内存管理

C++兼容C语言的内存管理方式,但提供了新的机制。new运算符不仅分配内存,还调用构造函数,而operatornew是C++的全局函数,用于辅助new进行内存分配。当new分配内存失败时,会抛出异常,这与malloc不同,malloc会返回NULL。operatornew通常封装malloc,确保异常处理一致性。
摘要由CSDN通过智能技术生成

1.c/c++中的程序划分

在这里插入图片描述

2.c/c++中的动态内存管理方式

在这里插入图片描述

那c++中呢?
首先c++是兼容c语言的,c语言的管理方式在c++中是可以使用的
那c++自己的呢?
c++中的new与delete:
在这里插入图片描述

对于内置类型,new与malloc并没有本质的区别,只是写法上更加的简便
对于自定义类型

在这里插入图片描述

new开辟空间失败会抛异常:

在这里插入图片描述
在这里插入图片描述

3.operator new 与operator delete

new的功能分为两个部分:
1 、开辟空间
2 、调用构造函数
那new的底层是怎么实现的呢?
在这里插入图片描述

对于这样一个自定义类型,看看new是怎么操作的
转到反汇编:
在这里插入图片描述

可以看到在反汇编界面,new关键字调用了operator new 与A类的构造函数,operator new是new的重载吗?
不是,在c++语法中operator new 就是一个全局函数,帮助new开空间
在这里插入图片描述

operator new 其实也是调用的malloc,那为什么不直接调用malloc?
因为malloc开辟空间失败会返回空,不符合new的返回机制,所以operator new封装了malloc,失败的时候进行抛异常

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值