C++核心准则包含有关virtual
,override
和final
说明符的following advice,特别涉及派生类析构函数:
当然,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
的优势,我的问题归结为以下特定部分:virtual
或override
? clang-tidy
建议还是C++核心准则建议? 最佳答案
override
? 当使用
override
:https://msdn.microsoft.com/en-us/library/xfzxhe2a.aspx指定析构函数时,会有一些不一致的编译器无法编译。virtual
...(当它隐式虚拟时)? 代码越少越好。通过不使用多余的
virtual
,您可以节省7个字符。对于基类及其所有子类,可能会做出一项设计决策,使先前的虚拟析构函数成为非虚拟析构函数。如果严格遵循此准则(不指定冗余
virtual
),则仅需要修改基础。否则,必须修改层次结构中的每个子级(或至少检查它们是否分别指定了virtual
)。在我看来,唯一具有重要意义的参数是旧的Visual Studio编译器的不符合项,因此,我不赞成在析构函数上不使用
override
。否则,它就无关紧要,您可以遵循自己喜欢的任何准则,甚至都不用遵循任何准则-当手头的话题没有区别时,一致性并不重要。关于c++ - 我应该将派生类的析构函数标记为虚拟/重写吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50354559/