多态类的隐式析构函数是否可以成为虚拟的

Could the implicit destructor of a polymorphic class be made virtual?

本文关键字:虚拟 析构函数 多态 是否      更新时间:2023-10-16

据我所知,定义一个具有虚拟函数但非虚拟析构函数的类总是一个错误(或者至少是自寻烦恼)。

因此(想想新创造的"零规则"),在我看来,对于任何至少有一个其他虚拟函数的类,隐式生成的析构函数都应该是虚拟的。

将来某个版本的C++标准强制要求这样做是否可行?或者换一种说法,有什么好的理由让多态类中的默认析构函数保持非虚拟的吗?

编辑:为了明确起见,我只是建议如果你写析构函数会发生什么——如果你写了自己的析构函数,你当然可以一如既往地选择它是否是虚拟的。我只想看到默认情况与常见情况相匹配(不妨碍更高级的使用)。

如果您不想或需要以多态方式删除此类对象,则不需要析构函数是虚拟的。相反,它可以是基类中的非虚拟protected,只允许以非多态方式删除。要求它自动虚拟化会给不需要多态销毁的应用程序带来不必要的成本。