C++中直接管理内存的方式

本文详细介绍了C++中如何使用new和delete运算符进行内存的动态管理,包括动态分配和初始化单一对象、动态分配const对象、处理内存耗尽情况、动态释放单一对象以及动态数组的分配与释放。强调了正确使用delete释放内存的重要性,以避免内存泄漏。

C++中定义了new和delete俩个运算符来直接管理内存

1.动态分配单一对象

(1)使用new动态分配和初始化对象

由于动态分配的内存是无名的,所以new不能为其分配对象名,而是返回指向该对象的指针

//分配一个int型的对象
int *pi = new int;

默认情况下,动态分配的对象是默认初始化的,我们也可以对其直接初始化。使用()构造方式或列表初始化

//构造方式初始化
int *pi = new int(66);

//列表形式初始化
vector<int> *pv = new vector<int>{1,2,4};

处于安全考虑,对动态分配的对象进行初始化是个好主意

2.动态分配const对象

用new分配const对象是合法的

//实例
const int *pci = new const int();
3.内存耗尽

即使我们的计算机的内存已经很大了,但是我们每个程序的自由空间还是有可能会被用完,此时调用new就会失败,new调用失败就会抛出bad_alloc异常,我们可以通过nothrow来阻止它抛出异常
nothrow定义在头文件new中

int *pi = new(nothrow)int;

2.动态释放单一对象

我们使用delete来释放对象,我们传递给delete的指针必须指向动态分配的内存,或是一个空指针,释放一块并非new分配的内存其结果是未定义的

int *pi = new int();

delete pi;

需要注意的是动态对象的生存期直到其被释放为止,这就意味着如果我们忘记delete那么这块内存将一直存在,所以我们几乎可以生成一条准则,当我们调用new时,那么一定要在结尾调用delete!!!

3.动态数组的分配与释放

前面介绍了new与delete一次只分配火释放一个对象,有时候我们需要像数组一样一次为很多对象分配一块内存。new同样有此功能具体用法如下

//分配5个int大小的内存
int *pi = new int[5];

分配好动态数组我们可以用delete来释放

delete []pi

注意pi前面不许有个[]来显示的告知系统所要释放的是个数组

需要注意的是动态分配的数组并不是数组对象,所以数组对象的好多功能它不能用,例如begin和end函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值