C++核心准则包含有关virtualoverridefinal说明符的following advice,特别涉及派生类析构函数:



当然,clang-tidy是违反建议的那些工具之一。
如果我未指定virtualoverride,则运行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的优势,我的问题归结为以下特定部分:
  • 如果有的话,哪些参数支持在派生类析构函数上不指定virtualoverride
  • 在您看来,我应该更倾向于clang-tidy建议还是C++核心准则建议?
  • 最佳答案

  • 如果有的话,哪些参数支持在派生类析构函数上不指定... override

  • 当使用override:https://msdn.microsoft.com/en-us/library/xfzxhe2a.aspx指定析构函数时,会有一些不一致的编译器无法编译。
  • (如果有的话)有哪些参数支持不在派生类析构函数上指定virtual ...(当它隐式虚拟时)?

  • 代码越少越好。通过不使用多余的virtual,您可以节省7个字符。
  • 计数器参数:7个字符节省不了多少。

  • 对于基类及其所有子类,可能会做出一项设计决策,使先前的虚拟析构函数成为非虚拟析构函数。如果严格遵循此准则(不指定冗余virtual),则仅需要修改基础。否则,必须修改层次结构中的每个子级(或至少检查它们是否分别指定了virtual)。
  • 反参数:这可能是完全假设的情况。当然很罕见。


  • 在您看来,我应该更倾向于clang-tidy建议还是C++核心准则建议?

  • 在我看来,唯一具有重要意义的参数是旧的Visual Studio编译器的不符合项,因此,我不赞成在析构函数上不使用override。否则,它就无关紧要,您可以遵循自己喜欢的任何准则,甚至都不用遵循任何准则-当手头的话题没有区别时,一致性并不重要。

    关于c++ - 我应该将派生类的析构函数标记为虚拟/重写吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50354559/

    10-13 06:27