c++中的new和delete

我们知道指针常和堆空间的分配有关。其实堆就是一块内存区域,它允许程序运行时通过指针的方式

从其中申请一定数量的存储单元。

堆内存有程序员管理。

上一篇讲了c的malloc和free,我们知道free是为了释放内存,否则造成内存泄漏(自己不用,其他程序也用不了,占着茅坑不拉屎的那种^_^)

malloc使用需要计算需要的内存大小,还必须类型转换 (int *)malloc(sizeof(int)

而new就不需那么麻烦

int *p1 = new int;就完事了

delete和free是差不多相同的

下面看个例子吧

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 int main()
 5 {
 6     int *p1,*p2,*p3;
 7     p1 = new int;//动态分配一个能存储int的内存区域
 8     p2 = new int(10);//分配一个int大小的内存区域,并把10存入其中,可以初始化值 
 9     p3 = new int[10];//分配能够存放10 int 的数组内存区域 
10     
11     //判断内存分配是否成功
12     if(!p3)
13     {
14         puts("allocation failure");
15         return 1;
16      } 
17      
18      *p1 = 5;
19      *p3 = 1; 
20      
21      p3[1] = 2;
22      p3[2] = 3;
23      
24      cout << "address of p1 = " << p1 <<" "<< "value of p1 = " << *p1 << endl;
25      cout << "address of p2 = " << p2 <<" "<< "value of p2 = " << *p2 << endl;
26      //基地址就是p3[0]地址 
27      cout << "address of p3[0] = " << p3 <<" "<< "value of p3[0] = " << *p3 << endl;
28      cout << "address of p3[1] = " << &p3[1] <<" "<< "value of p3[1] = " << p3[1] << endl;
29      
30      //内存释放
31      delete p1,p2;
32      //delete p3;不可行,因为这个地方只释放了第一地址
33      delete []p3; 
34     return 0;
35 }

那么new和delete 相对于malloc 和 free有什么优势呢?

1.new不需要用sizeof计算要分配的内存字节数,减少出错概率

2.new不用进行类型转换,就能自动返回正确的指针类型

3.new还可以初始化,比如上面代码的 p2 = new int(10)进行初始化

4.new 和 delete函数可以重载,意味着程序员可以进行一些扩展。自定义一些内存分配机制

转载于:https://www.cnblogs.com/mch5201314/p/11568105.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值