也谈delete的双重删除

来源:互联网 发布:青鸟软件开发培训 编辑:程序博客网 时间:2024/06/05 20:12

时间:2014.04.26

地点:基地

-----------------------------------------------------------------------------------

一、关于delete

  当我们通过delete来释放某个指针关联的内存时,这个内存就可以被程序中的其他部分使用了,但无法禁止我们还使用这个指针,delete的效果只是告诉程序,这块内存现在可以被别的地方申请了,我们delete的那个指针的独占权已经过期,但还是可以通过它来对内存进行操作,这时它是一个悬挂指针。

  然而,对于指针的双重删除会带来两个问题,一是,第一次delete后,该块内存上还没有被申请建立新的数据对象,那么再次delete会使程序会产生未定义的行为。二是如果第一次delete后该块内存上已经建立有新的数据对象,那么再次delete会使该块内存释放,从而造成数据破坏。

  delete删除后,对象可能还是在内存上保存完好,但现在无法保证它一直存在,一旦对象被删除,内存分配器不再有义务保证它一直存在。使用以删除的对象也不负责任的编程风格。

-----------------------------------------------------------------------------------

二、建议

  原则上推荐使用智能指针,至少在释放指针关联的内存后,应该将指针设置为nullptr,防止双重删除和使用无效指针。在nullptr上调用delete是允许的,也不会产生任何多余的效果。

0 0
原创粉丝点击