C++的虚函数表和虚析构

Posted 学渣的C/C++

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++的虚函数表和虚析构相关的知识,希望对你有一定的参考价值。

为啥派生类中的虚析构函数是空的?

【中文标题】为啥派生类中的虚析构函数是空的?【英文标题】:Why the virtual destructor in derived class is empty?为什么派生类中的虚析构函数是空的? 【发布时间】:2014-10-25 23:33:01 【问题描述】:

我有一个问题,我看到在某些代码中,派生类中的虚析构函数是空的,那么为什么我们需要它,因为它什么都不做?是不是用来调用基类的析构函数,没有它就不能调用析构函数?或者它只是一个符号告诉代码阅读器这个析构函数是虚拟的,这使得代码更容易阅读?谢谢!

【问题讨论】:

每个类都有一个析构函数。重要的问题是它是隐式定义的还是用户定义的,是否定义为已删除。 @Baum mit Augen:默认声明与用户定义不同。这在某些琐碎的分类问题中很重要。 【参考方案1】:

为什么我们需要它,因为它什么都不做?

如果基类已经有一个虚析构函数,我们不必必须在派生类中定义一个空析构函数。把它放在那里的唯一原因是提醒其他读者您的代码有一个虚拟析构函数用于该类。

是不是用来调用基类中的析构函数,没有它就不能调用析构函数?

一个空的析构函数参与析构链接的方式与非空或继承的析构函数相同。只要基类有一个虚析构函数,提供一个空的覆盖就不会改变行为。

【讨论】:

以上是关于C++的虚函数表和虚析构的主要内容,如果未能解决你的问题,请参考以下文章

解析虚函数表和虚继承

单继承与多继承中的虚函数表和虚函数指针

析构函数的虚析构和非虚析构调用的差别

多态中的虚析构函数

为什么析构函数必须是虚函数?为什么C++默认的析构函数不是虚函数

C++学习24 虚析构函数