当前位置: 首页 > news >正文

条款7:为多态基类声明virtual析构函数

1.假设有如下时间类:
    class TimeKeeper
    {
    public:
      TimeKeeper();
      ~TimeKeeper();
    };
    class AtomicClock :public TimeKeeper {};
    factory函数(用户只是想调用时间,而不想操心时间如何计算等细节):TimeKeeper *getTimeKeeper()
    //返回一个base class指针,并指向新生成的derived class
    TimeKeeper *a = getTimeKeeper(); //动态分配一个对象
    delete a; //释放
  这种做法会产生问题,因为getTimeKeeper返回的指针指向一个dervied class对象,而这个对象释放却使用了base class中的non-virtual析构函数。产生的后果是:可能对象中dervied class中的成分并未被删除。造成“局部销毁的错误”。
  消除这个错误的方法是在base class中定义一个virtual析构函数:virtual ~TimeKeeper()
  如果某个类并不是base class,将它的析构函数声明为virtual并不是一种好的做法。
2.如果class没有不是基类,那么就不需要virtual函数,virtual会消耗更多的内存,虚指针和虚表
3.纯虚函数最好给pure virtual析构函数提供一份定义

转载于:https://www.cnblogs.com/CoderZSL/p/7617197.html

相关文章:

  • Linux下rootkit后门检测工具chkrootkit
  • 人们应将公共云与私有云的辩论抛之脑后
  • 毕业两年的程序猿经验小结
  • 数据库 之 SQL语句构成和分类
  • ImageSharp .NET Core跨平台图形处理库
  • 触摸屏手指滑动方向检测
  • jQuery EasyUI快速入门实战教程(一)-入门
  • oracle业务硬盘出现故障无法访问,提示需要重新格式化后解决方法
  • 阿里云,为寄递业务探索创新升级
  • SkinSB皮肤滚动条库的一个帮助头文件
  • xmanager运行报错:bash: /usr/bin/xterm: No such file or directory
  • Android 音视频开发入门指南
  • 8.html表格相关的标记9.html表格实战《简单的网页布局》
  • 如何添加mysql到环境变量
  • 24、C#:按钮的属性和事件
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • Django 博客开发教程 16 - 统计文章阅读量
  • Git的一些常用操作
  • HTTP 简介
  • input的行数自动增减
  • JSONP原理
  • js中forEach回调同异步问题
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • nodejs实现webservice问题总结
  • PHP的类修饰符与访问修饰符
  • Spring Cloud Feign的两种使用姿势
  • windows下如何用phpstorm同步测试服务器
  • 基于遗传算法的优化问题求解
  • 聊聊directory traversal attack
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 强力优化Rancher k8s中国区的使用体验
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 《码出高效》学习笔记与书中错误记录
  • 【干货分享】dos命令大全
  • ​ArcGIS Pro 如何批量删除字段
  • $forceUpdate()函数
  • (¥1011)-(一千零一拾一元整)输出
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (C语言)fgets与fputs函数详解
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (强烈推荐)移动端音视频从零到上手(上)
  • (十)c52学习之旅-定时器实验
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (小白学Java)Java简介和基本配置
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (一)基于IDEA的JAVA基础10
  • ****Linux下Mysql的安装和配置
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .net/c# memcached 获取所有缓存键(keys)