博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
虚析构函数
阅读量:4106 次
发布时间:2019-05-25

本文共 704 字,大约阅读时间需要 2 分钟。

虚析构函数

虚析构函数

  虚析构函数是为了解决这样的一个问题: 的 指向派生类对象,并用基类的指针删除派生类对象。
  如果某个类不包含 ,那一般是表示它将不作为一个基类来使用。当一个类不准备作为基类使用时,使析构函数为虚一般是个坏主意。因为它会为类增加一个 ,使得对象的体积翻倍,还有可能降低其可移植性。
  所以基本的一条是:无故的声明虚析构函数和永远不去声明一样是错误的。实际上,很多人这样总结:当且仅当类里包含至少一个虚函数的时候才去声明虚析构函数。
   是准备被用做基类的,基类必须要有一个虚析构函数, 会产生抽象类,所以方法很简单:在想要成为抽象类的类里声明一个纯虚析构函数。

虚析构函数举例

  这里是一个例子:
  class awov { // awov = "abstract w/o
  // virtuals"
  public:
  virtual ~awov() = 0; // 声明一个纯虚析构函数
  };
  这个类有一个 ,所以它是抽象的,而且它有一个虚析构函数,所以不会产生析构函数问题。但这里还有一件事:必须提供纯虚析构函数的定义:
  awov::~awov() {} // 纯虚析构函数的定义
  这个定义是必需的,因为虚析构函数工作的方式是:最底层的派生类的析构函数最先被调用,然后各个 的析构函数被调用。这就是说,即使是 , 也要产生对~awov的调用,所以要保证为它提供 。如果不这么做, 就会检测出来,最后还是得回去把它添上。
  注意:如果声明虚析构函数为inline,将会避免调用它们时产生的开销,但编译器还是必然会在什么地方产生一个此函数的拷贝。

转载地址:http://lrjsi.baihongyu.com/

你可能感兴趣的文章
c++输出文件流ofstream用法详解
查看>>
字符编码:ASCII,Unicode 和 UTF-8
查看>>
QT跨MinGW和MSVC两种编译器的解决办法
查看>>
firewalld的基本使用
查看>>
Linux下SVN客户端使用教程
查看>>
i2c-tools
查看>>
Linux分区方案
查看>>
nc 命令详解
查看>>
如何使用 systemd 中的定时器
查看>>
git命令速查表
查看>>
linux进程监控和自动重启的简单实现
查看>>
OpenFeign学习(三):OpenFeign配置生成代理对象
查看>>
OpenFeign学习(四):OpenFeign的方法同步请求执行
查看>>
OpenFeign学习(五):OpenFeign请求结果处理及重试控制
查看>>
OpenFeign学习(六):OpenFign进行表单提交参数或传输文件
查看>>
OpenFeign学习(七):Spring Cloud OpenFeign的使用
查看>>
Ribbon 学习(二):Spring Cloud Ribbon 加载配置原理
查看>>
Ribbon 学习(三):RestTemplate 请求负载流程解析
查看>>
深入理解HashMap
查看>>
XML生成(一):DOM生成XML
查看>>