也谈delete的双重删除
来源:互联网 发布:青鸟软件开发培训 编辑:程序博客网 时间:2024/06/05 20:12
时间:2014.04.26
地点:基地
-----------------------------------------------------------------------------------
一、关于delete
当我们通过delete来释放某个指针关联的内存时,这个内存就可以被程序中的其他部分使用了,但无法禁止我们还使用这个指针,delete的效果只是告诉程序,这块内存现在可以被别的地方申请了,我们delete的那个指针的独占权已经过期,但还是可以通过它来对内存进行操作,这时它是一个悬挂指针。
然而,对于指针的双重删除会带来两个问题,一是,第一次delete后,该块内存上还没有被申请建立新的数据对象,那么再次delete会使程序会产生未定义的行为。二是如果第一次delete后该块内存上已经建立有新的数据对象,那么再次delete会使该块内存释放,从而造成数据破坏。
delete删除后,对象可能还是在内存上保存完好,但现在无法保证它一直存在,一旦对象被删除,内存分配器不再有义务保证它一直存在。使用以删除的对象也不负责任的编程风格。
-----------------------------------------------------------------------------------
二、建议
原则上推荐使用智能指针,至少在释放指针关联的内存后,应该将指针设置为nullptr,防止双重删除和使用无效指针。在nullptr上调用delete是允许的,也不会产生任何多余的效果。
0 0
- 也谈delete的双重删除
- 恢复delete删除的数据
- delete 删除字符串的字符
- 通过JS为 Table表增加一行,通过复选框删除多行,也可通过所在行的delete链接删除本行
- delete删除
- 我也谈一下EXE自删除的问题
- 也谈重复数据删除
- 并发(五):我也谈谈双重检查与对象的安全发布
- 数据库 误操作(更新数据(Update),删除数据(delete),当然也包括增加大量数据(insert))之后,给出的解决方案
- 删除对象的属性 delete的用法
- 删除对象的属性 delete的用法
- 双重for循环删除数据
- 删除 双重绑定 清空
- delete限制删除行数的问题
- File.Delete不能删除文件的问题
- 删除数据truncate与delete的区别
- ttable delete删除记录的问题
- 找回Oracle中Delete删除的记录
- poj2299 树形数组&&离散化
- 抽象、继承和动态绑定
- Go语言 Go的网络轮询及IO机制
- 出阁前要学习的功课
- Linux mount命令详解
- 也谈delete的双重删除
- HDOJ 1536 S-Nim SG函数求法
- mongoDB使用mapreduce实现简单的统计功能
- IOS开发之delegate与简单案例
- 保护模式总结(四)——分页机制
- 图像的形态学处理
- WIN32汇编-(1)
- git命令
- cocos2dx-3.0rc2 build on Eclipse