- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C的new和delete的的专题总结大全
New和delete的关键字的专题讲解;想弄懂这个问题,首先你要弄清楚数据的3种存储方式。
1。静态区: 全局变量。
2。堆: 程序执行是分配的内存
3。栈: 函数调用,局部变量。
new出来的内存就是分配到堆上的。程序执行完以后,堆上分配的内存不会被操作系统自动回收,所以你不delete掉的话,操作系统不回收,那块内存就成了没爹没娘的无业有民了,这个就叫内存泄露。
我这样说你应该知道为什么书上为什么说new和delete要成对出现了吧。分配出来的内存记得自己回收掉。
静态区和栈上面分配的内存操作系统会自动回收。所以不用delete了。
另外,我觉得你好像没有搞清楚new出来了什么东西,delete掉了什么东西。 ;我给你举例子说。
int * pt ;//声明了一个pt指针,四个字节,放在栈里面的
pt = new int;// new了一个int形的数据放在堆里面,再把这个数据的地址赋给pt。
这句话的意思是你先声明了一个pt指针,四个字节,放在栈里面的,然后你new了一个int形的数据放在堆里面,再把这个数据的地址赋给pt。
delete pt;
这个就是把pt指向的地址所占的内存释放掉。其实释放的就是堆上面的那个int。然后你的pt还是存在的,还在栈里面。不过你查它的值时,变成了null
这样说懂了吧。;其实你程序里面的del是在别的地方new了。
就比如:
int * A()
{
int *pt = new int;
return pt;
}
main()
{
int * ptMain;
ptMain = A();
delete ptMain;
}
这样一个过程,就像你给出的例子了。
不过,我们编程的时候尽量 谁new的谁delete,尽量避免内存泄露。 ;在内存管理上,C++ 和 C 有着完全不同的两套方案。当然,C++的总是同时兼容C。C的那一套方案在C++里同样可行。 我们首先看看纯C++的那一套: new 和 delete。
new ,从字面上看意思为 “新”;而delete 字面意思为“删除”。二者在C++中内存管理中大致的功能,应是一个为“新建”,一个为“删除”。
在C++语言中,仍然支持malloc()和free()来分配和释放内存,同时增加了new和delete来管理内存。;1、new 是 c++ 的一个关键字。被当作像 +、-、* 、/ 一样的操作符。它的操作结果是在申请到一段指定数据类型大小的内存。
语法:
数据类型 指针变量 = new 数据类型;
new 将做三件事:
1、主动计算指定数据类型需要的内存空间大小;
2、返回正确的指针类型;
3、在分配内存的一,将按照语法规则,初始化所分配的内存。
这是什么意思呢?看看例子吧:
int* p;
p = new int;
和以往不一样,p 这回不再“寄人篱下”,并不是指向某个已存在的变量,而是直接指向一段由new 分配而来的新内存空间。
“p 指向一段由new 分配而来的新内存空间” 这句话等同于:
“new 分配一段新的内存空间,然后将该内存空间的地址存入到变量p中。”
所以,最终p中仍然是存储了一个变量的地址,只是,这是一个“无名”变量。
;指向原有的某个变量,和指向一段新分配的内存空间,有什么区别呢?
“原有的变量”,可以比喻成指向一间原有的,并且有主的房间。而“新分配的内存空间”,则像是一个“临时建筑物”。我们必须在不用它的时候,主动将它拆迁。拆迁的工作由delete来完成
当指针变量通过 new ,而得到一个内存地址后,我们就可以像以前的所说的,通过该指针,通过*号,而对该内存地址(一个无名的变量),进行操作。
如:
int* p = new int;
*p = 100;
cout *p endl;
屏幕将输出100。 ;2 在new 时初始化内存的值
new 也可以在申请内存空间时,直接设置该段内存里要放点什么.
语法:
指针变量 = new 数据类型(初值);
这样,上例可以改为:
int* p = new int(100);
cout *p endl;
如果你申请的是字符类型的空间,并且想初始化为‘A:
char* pchar = new char(A); ;3 delete
语法:
delete 指针变量;
delete 将释放指定指针所指向的内存空间。
举例:
int* p;
p = new int;
*p = 100;
cout *p endl;
您可能关注的文档
- 5.国际公法的.doc
- 5.建筑构造概论的.ppt
- 5.第四章教师2008.9的.ppt
- 5-2行驶系统检查与蔚默护.ppt
- 50个很有用的老美口的头禅.doc
- 51-广东省成人高等降奶育学士学位.doc
- 51单片机汇编语言程的序经典考试题.ppt
- 50个应养成的好习惯的.ppt
- 5 商务礼仪及员工行的为规范.ppt
- 5458-段考暨写作试痰拟分析.ppt
- 2025安徽合肥某市直单位招聘编外工作人员4人笔试备考试题及答案解析.docx
- 质量管理体系论文.docx
- 2025年收费安全知识试题及答案.doc
- 2025国家电投集团吉电股份招聘110人(吉林)笔试备考题库及答案解析.docx
- 2025广东肇庆“粤聚英才粤见未来”德庆县教育局所属事业单位下半年招聘教师32人笔试备考题库及答案解析.docx
- 2025一级注册建筑师必考题含答案.docx
- 2025广东白云学院副校长招聘笔试备考试题及答案解析.docx
- 【9化期中】合肥市第五十中学东校2024--2025学年九年级上学期期中考试化学试题(解析版).docx
- 2025安徽合肥市市直机关、事业单位招募青年就业见习人员177人笔试备考试题及答案解析.docx
- 2025年嵌入式系统设计师考试嵌入式系统智能教育技术与应用试卷.docx
文档评论(0)