为什么虚拟类的析构函数不会自动添加到vtable中?

ger*_*imo 1 c++ polymorphism virtual destructor vtable

当虚拟类B派生自虚拟基类A时,除非在A和B中明确声明虚拟析构函数,否则Vtable中B的析构函数将指向A的析构函数.为什么?为什么B的vtable析构函数不会自动指向B的析构函数而不必定义A和B虚拟析构函数?

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

Seb*_*edl 6

C++的工作原理是"你不为你不使用的东西买单".强制任何具有任何虚函数的类的析构函数都是虚拟的,即使该类的客户端从不以多态方式(即通过基指针)删除该类的对象,也是非零成本(vtable中的插槽,删除)在需要虚函数调用的对象上).因此,没有明确的指令,C++就不会这样做.