C++中new和delete的使用方法

用户存储区空间分为三部分: 程序区(代码区)静态存储区(数据区)动态存储区(栈区和堆区)。代码区存放程序代码,程序运行前就可分配存储空间。数据区存放常量、静态变量、全局奕量等。栈区存放局部变量、函数参数、函数返回值和临时变量等。堆区是程序空间中存在的一些空闲存储单元,这些空闲存储单元组成堆。在堆中创建的数据对象称为堆对象。当创建对象时,堆中的一些存储单元从未分配状态变为已分配状态;当删除所创建的堆对象时,这些存储单元从已分配状态又变为未分配状态。当堆对象不再使用时,应予以删除,回收其所占用的动态内存。

在 C++中使用运算符 new 和 delete 来实现在堆内存区中进行数据的动态分配和释放。

对于计算机程序设计而言,变量和对象在内存中的分配都是编译器在编译程序时安排好的,这带来了极大的不便,如数组必须大开小用,指针必须指向一个已经存在的变量或对象。对于不能确定需要占用多少内存的情况,动态内存分配解决了这个问题。

new

new用来申请动态变量或动态数组:

指针变量 = new T;
指针变量 = new T(初值列表);
指针变量 = new T[元素个数];

new创建对象的特点:

new返回一个指定的合法数据类型内存空间的首地址,若分配不成功,返回一个空指针。
new创建堆对象的格式:类名 *指针名 = new 类名([构造函数参数]);
new不能对动态分配的数组存储区进行初始化。
new分配的空间,试用结束只能用delete显式释放,否则这部分内存空间得不到释放,造成内存泄露。
new对象指针用途广泛,比如作为函数返回值、函数参数等。

delete

delete用来释放动态变量或动态数组所占的空间,格式为;

delete 指针变量名
delete []指针变量名

delete特点:

释放动态变量所占的内存空间
释放动态数组所占的内存空间;delete []p;

注意事项:

1. new 和 delete 需要配套使用,如果搭配错了,程序运行时就会发生不可预知的错误。
2. 在用 delete 释放指针所指的空间时,必须保证该指针所指的空间是用 new 申请的,并且只能释放一次,否则将产生 指针悬挂问题。
3. 如果在程序中用 new 申请了空间,就应该在结束程序前释放所有申请的空间,这样才能保证堆内存的有效利用。
4. 当delete 用于释放由 new 创建的数组连续内存空间时,无论是一维数组还是多维数组指针变量名前必须使用[],且[]内没有数字。
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小谢%同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值