欢迎来到天天文库
浏览记录
ID:38833659
大小:277.32 KB
页数:16页
时间:2019-06-20
《C的new和delete的专题总结大全》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、New和delete的关键字的专题讲解小洪想弄懂这个问题,首先你要弄清楚数据的3种存储方式。1。静态区:全局变量。2。堆:程序执行是分配的内存3。栈:函数调用,局部变量。new出来的内存就是分配到堆上的。程序执行完以后,堆上分配的内存不会被操作系统自动回收,所以你不delete掉的话,操作系统不回收,那块内存就成了没爹没娘的无业有民了,这个就叫内存泄露。我这样说你应该知道为什么书上为什么说new和delete要成对出现了吧。分配出来的内存记得自己回收掉。静态区和栈上面分配的内存操作系统会自动回收。所以不用delete了。另外,我觉得你好像没有搞清楚new出来
2、了什么东西,delete掉了什么东西。我给你举例子说。int*pt;//声明了一个pt指针,四个字节,放在栈里面的pt=newint;//new了一个int形的数据放在堆里面,再把这个数据的地址赋给pt。这句话的意思是你先声明了一个pt指针,四个字节,放在栈里面的,然后你new了一个int形的数据放在堆里面,再把这个数据的地址赋给pt。deletept;这个就是把pt指向的地址所占的内存释放掉。其实释放的就是堆上面的那个int。然后你的pt还是存在的,还在栈里面。不过你查它的值时,变成了null这样说懂了吧。其实你程序里面的del是在别的地方new了。就比如
3、:int*A(){int*pt=newint;returnpt;}main(){int*ptMain;ptMain=A();deleteptMain;}这样一个过程,就像你给出的例子了。不过,我们编程的时候尽量谁new的谁delete,尽量避免内存泄露。在内存管理上,C++和C有着完全不同的两套方案。当然,C++的总是同时兼容C。C的那一套方案在C++里同样可行。我们首先看看纯C++的那一套:new和delete。new,从字面上看意思为“新”;而delete字面意思为“删除”。二者在C++中内存管理中大致的功能,应是一个为“新建”,一个为“删除”。在C++
4、语言中,仍然支持malloc()和free()来分配和释放内存,同时增加了new和delete来管理内存。1、new是c++的一个关键字。被当作像+、-、*、/一样的操作符。它的操作结果是在申请到一段指定数据类型大小的内存。语法:数据类型指针变量=new数据类型;new将做三件事:1、主动计算指定数据类型需要的内存空间大小;2、返回正确的指针类型;3、在分配内存的一,将按照语法规则,初始化所分配的内存。这是什么意思呢?看看例子吧:int*p;p=newint;和以往不一样,p这回不再“寄人篱下”,并不是指向某个已存在的变量,而是直接指向一段由new分配而来的
5、新内存空间。“p指向一段由new分配而来的新内存空间”这句话等同于:“new分配一段新的内存空间,然后将该内存空间的地址存入到变量p中。”所以,最终p中仍然是存储了一个变量的地址,只是,这是一个“无名”变量。指向原有的某个变量,和指向一段新分配的内存空间,有什么区别呢?“原有的变量”,可以比喻成指向一间原有的,并且有主的房间。而“新分配的内存空间”,则像是一个“临时建筑物”。我们必须在不用它的时候,主动将它拆迁。拆迁的工作由delete来完成当指针变量通过new,而得到一个内存地址后,我们就可以像以前的所说的,通过该指针,通过*号,而对该内存地址(一个无名的
6、变量),进行操作。如:int*p=newint;*p=100;cout<<*p<7、t<<*p<8、+编程大忌的事:访问一个已经delete的指针的值。
7、t<<*p<8、+编程大忌的事:访问一个已经delete的指针的值。
8、+编程大忌的事:访问一个已经delete的指针的值。
此文档下载收益归作者所有