C++学习之new 与 delete表达式

new和delete表达式动态创建和释放单个对象

a)         基本知识介绍:定义变量时,必须指定其数据类型和名字。而动态创建对象时只需指定其数据类型而不必为该对象命名。取而代之的是,new表达式返回新创建对象的指针,我们通过指针来访问此对象:

int i;//命名的但未初始化的变量

int *pi = new int;//pi指向一个动态分配的未命名,未初始化的变量

b)         简单代码演示:

             a)         动态创建对象的初始化

                          int i(1024);//i=1024

                          int *pi = new int(1024);//pi指向的对象的值是1024

                          string s(10,’9’);//十个9的字符串

                          string *ps = new string(10,’9’);//*ps为十个9的字符串

             b)         动态创建对象的默认初始化

                         如果不提供显示的初始化,对于类类型的对象,用该类的默认构造函数进行初始化;而内置类型的对象则无初始化

                         string *ps = new string//初始化为一个空字符串

                          int *pi = new int //pi指向一个未初始化的整型

                          ()是值初始化的语法

                          int *pi = new int();//pi表示指向一个值为0的整数

              c)         撤销动态创建对象

                           动态创建的对象用完之后,必须显示地将该对象占用的内存返回给自由存储区。

                           delete pi;

                          上面的命令释放pi指向的int型对象所占用的内存空间。

                          注意:如果指针指向的不是new分配的内存地址,则在该指针上使用delete是不合法的。具体举例如下:

                          int i;

                          int *pi = &i;

                          string str = “yanlei”;

                          double *pd = new double(33);

                          delete str;//error:str不是一个动态对象

                          delete pi;//error:pi指向的是一个本地变量

                          delete pd;//ok

c)         小常识:C++中不允许定义长度为0的数组,释放动态数组空间的正确语法语句为:

若定义为:int *pia = new int[10]

则释放空间的语句为:delete[] pia;

理论上,回收数组时缺少方括号对,至少会导致运行时少释放了内存空间,从而产生内存泄露。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值