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

时间:2018-04-14 15:46:49

标签: c++ polymorphism virtual destructor vtable

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

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

1 个答案:

答案 0 :(得分:6)

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