c++ - 为什么一个虚类的析构函数没有自动添加到虚表中?

标签 c++ polymorphism virtual destructor vtable

当虚类B派生自虚基类A时,除非在A和B中显式声明虚析构函数,否则虚表中B的析构函数将指向A的析构函数。为什么?为什么 B 的 vtable 析构函数不自动指向 B 的析构函数而无需定义 A 和 B 虚拟析构函数?

编辑:意识到如果不使 A 的析构函数成为虚拟函数,B 的析构函数甚至不在 vtable 中,因此当调用 A 的析构函数时,它只是直接调用 A 的。我的问题没有意义。

最佳答案

C++ 的工作原理是“你不用为你不用的东西付费”。强制任何具有任何虚函数的类的析构函数为虚函数,即使该类的客户从不以多态方式(即通过基指针)删除该类的对象,也是非零成本(vtable 中的槽,删除在需要虚函数调用的对象上)。因此,如果没有明确的指示,C++ 不会这样做。

关于c++ - 为什么一个虚类的析构函数没有自动添加到虚表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49833252/

相关文章:

c++ - 融合样式不适用于 QTabWidget 中的 QTextBrowser

c++ - 将纳秒转换为秒和纳秒

c++ - 具有 `stdio.h` 函数的模板和名称查找

C++继承与抽象函数实现

java - 静态方法继承和多态

apache - 网站打不开https

c++ - 有没有办法做一个循环堆栈?

C++ 泛型和多态性 : is this pattern workable?

css - Ractive 是否为 <style> 元素维护单个节点?

c++ - 从基类 C++ 调用虚方法