当虚类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/