注册 登录
编程论坛 C++教室

关于c++中new 和 delete的问题

wghost 发布于 2010-03-15 12:45, 1581 次点击
   我们都知道用new可以在堆中为程序开辟空间,但是如果程序在结束之前未对new开辟的空间用delete删除,是否可以啊??程序结束运行时是不是自动把new开辟的空间释放了??
   那位高手帮忙解答一下!!
14 回复
#2
hahayezhe2010-03-15 13:36
delete应该理解为释放,

不释放可以 但是很危险!
#3
ltyjyufo2010-03-15 15:39
    在程序中用到NEW分配内存空间时,运行结束得 时候一定要用delete来释放分配的内存空间,如果你不释放得话系统的内存将会减少,一两个程序这么做可能没有什么,但是如果所以得程序都这么干得话,那就有得玩咯。内存时及其宝贵得资源啊。我们不能有借不还啊。。。(我想在你下次开机的时候那内存应该回来了吧,我个人想的哦,错了大家指正一下呵呵)
#4
秀痘魔导士2010-03-15 15:43
以下是引用ltyjyufo在2010-3-15 15:39:00的发言:

    在程序中用到NEW分配内存空间时,运行结束得 时候一定要用delete来释放分配的内存空间,如果你不释放得话系统的内存将会减少,一两个程序这么做可能没有什么,但是如果所以得程序都这么干得话,那就有得玩咯。内 ...
程序结束后自动释放
#5
wei00002010-03-15 16:00
4楼说的对啊
#6
mghxz2522010-03-15 16:41
应该是程序结束的时候会自动释放,但是如果你的程序比较大的话,那就有的玩了。
#7
apull2010-03-17 18:02
new出来的空间一直会保留到delete或者程序结束。

如果new出来的空间比较大,用完后不delete,那么n个new之后,你会发现内存空间不够用了,严重的会导致系统奔溃。
#8
ltyjyufo2010-03-18 18:06
       如果程序结束后会自动释放的话,那要delete来做什么????????我觉得系统在没有关机之前是收不回分配出去的内存的(不用delete释放的话),只有在下次开机(或重起)的时候系统才能够收回。
#9
hahayezhe2010-03-18 19:46
用delete这是一个习惯  程序结束后 内存就将释放 啥都没了 !
#10
lintaoyn2010-03-20 11:16
回复 8楼 ltyjyufo
这个跟操作系统有关系,在XP里,你没用delete去释放,程度结束了,系统也会把那些内存回收回去。自己写段代码再调出资源管理器察看验证下。
#11
wghost2010-03-20 13:51
真是众说纷纭啊,谁能给一个确切的答案啊???
#12
yangriver2010-03-21 13:37
原来如此
#13
guchao20092010-03-26 13:22
必须用delete释放,养成这个习惯。
如果应用程序不释放申请的内存空间,那么系统会因为内存耗尽而崩溃。
这是c++的弊端。
#14
秀痘魔导士2010-03-26 13:29
以下是引用ltyjyufo在2010-3-18 18:06:55的发言:

       如果程序结束后会自动释放的话,那要delete来做什么????????我觉得系统在没有关机之前是收不回分配出去的内存的(不用delete释放的话),只有在下次开机(或重起)的时候系统才能够收回。
好好补补什么叫内存泄露
#15
秀痘魔导士2010-03-26 13:33
以下是引用ltyjyufo在2010-3-18 18:06:55的发言:

       如果程序结束后会自动释放的话,那要delete来做什么????????我觉得系统在没有关机之前是收不回分配出去的内存的(不用delete释放的话),只有在下次开机(或重起)的时候系统才能够收回。
内存泄漏会因为减少可用内存的数量从而降低计算机的性能。最终,在最糟糕的情况下,过多的可用内存被分配掉导致全部或部分设备停止正常工作,或者应用程序崩溃。
  内存泄漏可能不严重,甚至能够被常规的手段检测出来。在现代操作系统中,一个应用程序使用的常规内存在程序终止时被释放。这表示一个短暂运行的应用程序中的内存泄漏不会导致严重后果。
  在以下情况,内存泄漏导致较严重的后果:
  * 程序运行后置之不理,并且随着时间的流失消耗越来越多的内存(比如服务器上的后台任务,尤其是嵌入式系统中的后台任务,这些任务可能被运行后很多年内都置之不理);
  * 新的内存被频繁地分配,比如当显示电脑游戏或动画视频画面时;
  * 程序能够请求未被释放的内存(比如共享内存),甚至是在程序终止的时候;
  * 泄漏在操作系统内部发生;
  * 泄漏在系统关键驱动中发生;
  * 内存非常有限,比如在嵌入式系统或便携设备中;
  * 当运行于一个终止时内存并不自动释放的操作系统(比如AmigaOS)之上,而且一旦丢失只能通过重启来恢复。

new delete 不一定发生在构造和析构,程序运行过程中发生的,你能及时弥补吗?
1