C++的动态内存管理

一、C与C++的内存管理以及分配

C语言中的内存管理是通过函数区申请分配内存的: link ;而在C++中则是通过new和delete两个关键字区堆区申请及释放空间的。

二、C++中的new和delete

1、new/new[]和delete/delete[]的用法

new在申请空间后返回空间的地址,并且可以对这块空间进行初始化,如果没有初始化就是一个随机值。
在这里插入图片描述
new[] 会申请一个数组,new[]会申请一个数组,[]中需要确定数组的长度
new出来的数组也是可以初始化的,后面加(),就代表全部元素初始化为0
如果需要对new出来的数组,中的元素初始化为自己想要的值就需要用{},
需要注意的是,初始化的元素量不能超过总元素的和剩下没有初始化的元素会
对于内置类型就初始化为0,对于自定义类型会调用构造函数走初始化列表
在这里插入图片描述
在new完一块空间后,要是不对这块空间进行清理就会造成内存泄漏,所以在使用new和new[]后,需要与delete和delete[],搭配使用,以免造成内存泄漏。
在这里插入图片描述

2、new和delete对于内置类型和自定义类型的区别

对于内置类型来说,new就是正常的开辟一个空间,delete也就是对这个空间进行清理;主要是在对自定义类型上,new会调用自定义类型的构造函数去开辟空间,并且利用构造函数初始化这一块空间,而对于delete来说就是调用析构函数清理空间
在这里插入图片描述

三、new和delete的底层原理

1、全局的operator new和全局的operator delete

其实在new和delete的底层上,他们两个是调用了一个全局的operator new全局的operator delete,这两个全局函数的里面实际还是使用了malloc和free,底层代码:


                
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值