第四篇:new和delete的基本用法

本文详细介绍了C++中new和delete运算符的功能及其用法,包括如何动态管理单个变量或对象的空间以及如何动态管理数组空间。文章还强调了正确的资源释放方式,避免内存泄漏等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

       new和delete是C++中用来动态管理内存分配的运算符,其用法较为灵活。如果你对它们的几种不同用法感到困惑,混淆,那么接着看下去吧。

功能一:动态管理单变量/对象空间

       下面例子使用new为单个变量/对象开辟空间:

1 // 创建一个指向整型元素的指针pi,其所指对象为整数100。
2 int *pi = new int(100);    
3  
4 // 创建一个指向字符串元素的指针ps,其所指对象为字符串"ssssssssss"。
5 string *ps = new string(10, 's');   

       对于开辟的单变量/对象空间,我们只能通过new操作符返回的指针来控制,而不能通过变量名/对象名。另外,如果上述定义式右边的 () 为空,则对变量/对象进行值初始化,而如果连 () 都没有,则进行默认初始化。(这里假定你已清楚值初始化和默认初始化的区别)

       当这部分空间使用完毕,应当使用delete将其回收,上述例子对应回收语句如下:

1 delete pi;
2 pi=NULL;
3  
4 delete ps;
5 ps=NULL;

       需要说明的是:1. 每个new都必须对应一个delete 2. 一个内存空间只能被delete一次   (下面这种功能实现也要满足这两点)

功能二:动态管理数组空间

  下面例子使用new为数组开辟空间:

1 // 创建一个"数组指针"pia,pia将指向一个含有10个整型元素的数组的第一个元素。
2 int *pia = new int[10];
3 
4 // A是类名
5 // 创建一个"数组指针"pib,pib将指向一个含有10个A类对象的数组的第一个对象。
6 A *pib = new A[10];

       对于开辟的数组空间,我们只能通过new操作符返回的指针来控制,而不能通过数组名。另外,如果上述定义式右边末尾加上空 (),则数组进行值初始化,否则数组元素是未定义的(如本例)

  当这部分空间使用完毕,应当使用delete将其回收,上述例子对应回收语句如下:

1 delete [] pia;
2 pia = NULL;
3  
4 delete [] pib;
5 pib = NULL;

       需要特别注意delete右边的那个[],如果遗漏,将很可能导致难以预料的错误。

转载于:https://www.cnblogs.com/muchen/p/6308732.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值