new 和 delete

你想弄懂这个问题,首先你要弄清楚数据的3种存储方式。
1。静态区:  全局变量。
2。堆:      程序执行是分配的内存
3。栈:      函数调用局部变量。

new出来的内存就是分配到堆上的。程序执行完以后,堆上分配的内存不会被操作系统自动回收,所以你不delete掉的话,操作系统不回收,那块内存就成了没爹没娘的无业有民了,这个就叫内存泄露。

我这样说你应该知道为什么书上为什么说new和delete要成对出现了吧。分配出来的内存记得自己回收掉。

静态区和栈上面分配的内存操作系统会自动回收。所以不用delete了。

另外,我觉得你好像没有搞清楚new出来了什么东西,delete掉了什么东西。我给你举例子说。

int * pt ;
pt = new int;
这句话的意思是你先声明了一个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,尽量避免内存泄露
 
 
总结就是:new出来的是在堆上分配一个指向相应类型数据的地址,之后添加或赋值,程序运行结束数值不消除,只有delete地址才能清楚。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值