【发布时间】:2018-09-24 18:33:13
【问题描述】:
当虚类 B 派生自虚基类 A 时,除非在 A 和 B 中显式声明虚析构函数,否则 B 在 vtable 中的析构函数将指向 A 的析构函数。为什么?为什么 B 的 vtable 析构函数不自动指向 B 的析构函数而不需要定义 A 和 B 的虚拟析构函数?
edit:意识到如果不将 A 的析构函数设为虚拟,B 的析构函数甚至不在 vtable 中,因此在调用 A 的析构函数时它只是直接调用 A 的析构函数。我的问题没有意义。
【问题讨论】:
-
因为这是语言标准所说的应该发生的事情。而 C++ 的工作原则是“不用为不用的东西付费”。
标签: c++ polymorphism virtual destructor vtable