new和delete

来源:互联网 发布:centos7 yum安装wine 编辑:程序博客网 时间:2024/05/18 19:43
       delete 删除的是动态内存, 动态内存在操作系统中称做堆,它是操作系统的堆管理器来处理,堆有堆块组成分为空闲的,使用的 ,new就是在堆空间中申请一个空间,让p指向这个生成的空间,也就是告诉堆这个地方我占了,其它内存变动的不能改这个区域。当你new一片堆块的时候,它被标记为使用的 ,当你delete它的时候,它实际上就是释放这个地方,把那片堆块重新标记为空闲的,告诉系统这个地方我不要了,你可以给别人,而不是删除内存空间, 虽然你还能使用它,但是如果程序中还有其它new运算,可能会把delete的那片堆块重新分配出去,因为delete后它是空闲的……

在delete之后重设指针的值

执行语句

delete p;后,p变成没有定义。

在很多机器上,尽管p没有定义,蛋仍然存放了它之前所指向对象的地址,然而p所指向的内存已经已经被释放,因此p不再有效。

删除指针后,该指针变成悬垂指针。

悬垂指针 :指向曾经存放对象的内存,蛋该对象已经不再存在了。

悬垂指针往往导致程序的错误,而且很难检测出来

注意: 一旦删除了指针所指向的对象,立即将指针置0,这样就非常清楚的表明指针不再指向任何对象。

原创粉丝点击