当虚拟类B派生自虚拟基类A时,除非在A和B中显式声明虚拟析构函数,否则vtable中B的析构函数将指向A的析构函数。为什么?为什么B的vtable析构函数不自动指向B的析构函数而不必定义A和B虚拟析构函数?
编辑:意识到如果没有使A的析构函数是虚拟的,B的析构函数甚至不在vtable中,所以当调用A的析构函数时,它只是直接调用A的析构函数。我的问题没有意义。
发布于 2018-04-14 15:52:20
C++的工作原则是“不为不使用的东西付费”。强制任何具有任何虚拟函数的类的析构函数都是虚拟的,即使该类的客户端从未从多形性(即通过基本指针)删除该类的对象,这是一个非零成本( vtable中的插槽,删除需要虚拟函数调用的对象)。因此,C++在没有显式指令的情况下不会这样做。
https://stackoverflow.com/questions/49833252
复制相似问题