为什么一个虚拟 class 的析构函数没有自动添加到 vtable 中?

Why is not the destructor of a virtual class automatically added to the vtable?

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

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

C++ 的工作原理是"you don't pay for what you don't use"。强制任何具有任何虚函数的 class 的析构函数为虚函数,即使 class 的客户端从不以多态方式(即通过基指针)删除该 class 的对象,也是如此非零成本(vtable 中的槽,删除需要虚函数调用的对象)。因此,如果没有明确的指示,C++ 不会这样做。