c++中new/delete

new

1:C++ new/delete是运算符,不是函数,没有头文件,不要头文件。

2:new 语法格式
(1): 指针 = new 类型;
(2): 指针 = new 类型(初始表达式);
(3): 指针 = new 类型 【元素个数】;

举例:
(1): int *a = new int;
申请内存,定义int变量.即开辟一个存放整数的存储空间,返回一个指向该存储空间的地址 (即指针 ) 。

(2): int *a = new int(100);
申请内存,定义int变量,并初始化为100.即开辟一个存放整数的空间,并指定该整数的初值为100,返回一个指向该 存储
空间的地址。

(3): int *a = new int[100];
申请内存,定义int[100]数组变量,即开辟一个存放字符数组 (包括 10 个元素 )的空间,返回首元素的地址。

(4): 当然二维数组,其他类型皆可
如:int **a = new int[5][6];
float *p=new float (3.14159);等等…

注意:如果由于内存不足等原因而无法正常分配空间,则 new 会返回一个空指针 NULL,用户可以根据该指针的值判断分配空间是否成功。即需要用户简单判断返回值。

储存机制

数组与new
两种形式定义的目的一样的,即分配int[10]
红1:更为简单,也不需要判断内存是否分配成功。

这种定义-----实际上是在栈内,但是栈的实际内存是连续内存,因此可分配空间较小。

红2:
主要应用于内存的动态分配,

如果定义a[10000000]或者更大的话,应该选用后者,因为实际定义在堆内,堆可以是非连续内存,可以分配较大内存。

因此,如果需要分配较大内存,需要分配在堆上。

delete
1:new和delete必须配对使用,delete只能释放堆空间。使用时要防止内存泄漏(memory leak)和重复释放

如果new返回的指针值丢失,则所分配的堆空间无法回收,称内存泄漏。
同一空间重复释放也是危险的,因为该空间可能已另分配,

所以必须妥善保存new返回的指针,以保证不发生内存泄漏,也必须保证不会重复释放堆内存空间。

2:delete语法格式

(1):delete 指针
int *a = new int;
delete a; //释放单个int的空间

(2):delete []指针
int *a = new int[5];
delete []a; //释放int数组空间

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值