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

2023-12-01

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

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


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐