C ++核心指南包含virtual
,override
和final
说明符的following advice,特别是与派生类析构函数相关:
如果将基类析构函数声明为virtual,则应避免声明派生类析构函数为virtual或override。一些代码库和工具可能会坚持对析构函数进行覆盖,但这不是这些指南的推荐。
果然,clang-tidy
是违反建议的工具之一。
如果我未指定virtual
或override
,则运行clang-tidy
会发出以下警告:
warning: annotate this function with 'override' or (rarely) 'final' [modernize-use-override]
或者,如果指定为virtual
:
warning: prefer using 'override' or (rarely) 'final' instead of 'virtual' [modernize-use-override]
鉴于特别指定override
的优点是(至少)随后您已将基类析构函数正确指定为virtual
,我的问题归结为以下特定部分:< / p>
virtual
或override
的论据是什么?clang-tidy
建议还是C ++核心指南建议?答案 0 :(得分:-1)
override
的参数是什么,如果有的话?当使用override
:https://msdn.microsoft.com/en-us/library/xfzxhe2a.aspx指定析构函数时,有一些不符合要求的编译器无法编译。
virtual
...的参数[隐式虚拟时]是什么?更少的代码更好。通过不使用冗余virtual
来保存7个字符。
可能有一个设计决定是为基类及其所有子项创建一个非虚拟的析构函数非虚拟。如果严格遵循此指南(未指定冗余virtual
),则只需要修改基数。否则,必须修改层次结构中的每个子项(或至少检查它们是否单独指定virtual
。)
在我看来,唯一具有重要意义的论点是旧的Visual Studio编译器的不一致性,因此我不会在析构函数上使用override
。否则它很重要,你可以遵循你喜欢的任何指导方针,或者甚至不打扰任何一方 - 当手头的主题没有区别时,一致性并不重要。