博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++中的new和delete
阅读量:4695 次
发布时间:2019-06-09

本文共 1437 字,大约阅读时间需要 4 分钟。

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

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

堆内存有程序员管理。

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

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

而new就不需那么麻烦

int *p1 = new int;就完事了

delete和free是差不多相同的

下面看个例子吧

1 #include
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

你可能感兴趣的文章
Poj 1019 Number Sequence( 数据分析和操作)
查看>>
Hibernate实现分页查询
查看>>
Odoo与浪潮合资研发PS Cloud之如何管理你不拥有的股票
查看>>
2017-2018-1 20155220 20155309 20155317 实验一 开发环境的熟悉
查看>>
SQL Plus使用简单介绍
查看>>
Javascript面向对象编程(二):构造函数的继承
查看>>
hdu 4462(状态压缩)
查看>>
我的linuxES
查看>>
FileReader文件读取API
查看>>
UVa 11300 Spreading the Wealth 分金币
查看>>
[leetcode] Happy Number
查看>>
Java第五周学习总结
查看>>
j.c.Warnsdorff马踏棋盘算法
查看>>
git私服
查看>>
the openning
查看>>
python 字符串 和 print
查看>>
MAC OS下安装Minizip
查看>>
Java_Certificates does not conform to algorithm constraints
查看>>
box-shadow
查看>>
字符串截取
查看>>