• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++中的delete不会将操作数置0

C++中的delete不会将操作数置0

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c++ delete,c++ new delete,c++中new和delete,c++delete函数,c++随机数等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

考虑一下:

  delete p;
  // ...
  delete p;
</div>

如果在...部分没有涉及到p 的话,那么第二个“delete p;”将是一个严重的错误,因为C++的实现(译注:原文为a C++ implementation,当指VC++这样的实现了C++标准的具体工具)不能有效地防止这一点(除非通过非正式的预防手段)。既然delete 0从定义上来说是无害的,那么一个简单的解决方案就是,不管在什么地方执行了“deletep;”,随后都执行“p=0;”。但是,C++并不能保证这一点。

一个原因是,delete 的操作数并不需要一个左值(lvalue)。考虑一下:

  delete p+1;
  delete f(x);
</div>

在这里,被执行的delete 并没有拥有一个可以被赋予0 的指针。这些例子可能很少见,但它们的确指出了,为什么保证“任何指向被删除对象的指针都为0”是不可能的。绕过这条“规则”的一个简单的方法是,有两个指针指向同一个对象:

  T* p = new T;
  T* q = p;
  delete p;
  delete q; // 糟糕!
</div>

C++显式地允许delete 操作将操作数左值置0,而且我曾经希望C++的实现能够做到这一点,但这种思想看来并没有在C++的实现中变得流行。

如果你认为指针置0 很重要,考虑使用一个销毁的函数:

  template<class T> inline void destroy(T*& p) { delete p; p = 0; }
</div>

考虑一下,这也是为什么需要依靠标准库的容器、句柄等等,来将对new 和delete 的显式调用降到最低限度的另一个原因。

注意,通过引用来传递指针(以允许指针被置0)有一个额外的好处,能防止destroy()在右值上(rvalue)被调用:

  int* f();
  int* p;
  // ...
  destroy(f()); // 错误:应该使用一个非常量(non-const)的引用传递右值
  destroy(p+1); // 错误:应该使用一个非常量(non-const)的引用传递右值
</div>

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++动态内存分配(new/new[]和delete/delete[])详解
  • C++中的delete不会将操作数置0
  • C++表达式new与delete知识详解
  • C++中delete和delete[]的区别
  • C++基础入门教程(五):new和delete
  • C++之CNoTrackObject类和new delete操作符的重载实例
  • c++中new和delete操作符用法
  • 浅析c++中new和delete的用法
  • C++ new/delete相关知识点详细解析
  • C++中delete和delete[]的区别说明

相关文章

  • 2017-05-28C++中异常处理的基本思想及throw语句抛出异常的使用
  • 2017-05-28Win32应用程序(SDK)设计原理详解
  • 2017-05-28深入解析unsigned int 和 int
  • 2017-05-28c++利用stl set_difference对车辆进出区域进行判定
  • 2017-05-28VC使用TerminateProcess结束进程实例
  • 2017-05-28详解C语言中fseek函数和ftell函数的使用方法
  • 2017-05-28C语言的数字游戏算法效率问题探讨实例
  • 2017-05-28解析C++中的虚拟函数及其静态类型和动态类型
  • 2017-05-28纯C语言:折半查找源码分享
  • 2017-05-28C语言 makefile学习及实现实例

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C++普通函数指针与成员函数指针实例解析
    • 使用ShellClass获取文件属性详细信息的实现方法
    • 深入理解双指针的两种用法
    • C++设计类不能被继承的方法实例讲解
    • 基于C++ Lambda表达式的程序优化
    • 北邮考研复试C语言上机题目精选
    • C++通过COM接口操作PPT
    • C++非递归建立二叉树实例
    • C++ 实现求最大公约数和最小公倍数
    • C++回文数及素数问题计算方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有