据我所知,用虚拟函数定义一个类但非虚拟析构函数总是错误(或者至少要求麻烦)。
因此(并且考虑到新创造的“零规则”),在我看来,隐式生成的析构函数应该对于具有至少一个其他虚函数的任何类自动是虚拟的。
对于某些未来版本的C ++标准来说,这是否可行?换句话说,有没有什么好的理由让默认析构函数在非多态类中保持非虚拟?
编辑:为了说清楚,我只是建议如果你不写一个析构函数会发生什么 - 如果你自己编写,你当然可以像往常一样选择它是否是虚拟的。我只是希望看到默认匹配常见情况(不会阻止更高级的使用)。
答案 0 :(得分:1)
如果您不想或不需要多态删除此类对象,则不需要析构函数是虚拟的。相反,它可以是基类中的protected
非虚拟,只允许非多态地删除。要求它自动虚拟化会对不需要多态破坏的应用程序施加不必要的成本。