- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
C++ 核心指南包含 following advice关于 virtual
、override
和 final
说明符,特别是与派生类析构函数有关:
If a base class destructor is declared virtual, one should avoid declaring derived class destructors virtual or override. Some code base and tools might insist on override for destructors, but that is not the recommendation of these guidelines.
果然,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 时]?代码越少越好。通过不使用多余的 virtual
,您可以节省 7 个字符。
可能有一个设计决策,使基类及其所有子类的先前虚拟析构函数成为非虚拟析构函数。如果严格遵循此准则(不指定冗余 virtual
),则只需要修改 base。否则必须修改层次结构中的每个子级(或至少检查它们是否单独指定 virtual
)。
在我看来,唯一具有重要意义的论点是旧版 Visual Studio 编译器的不一致性,因此我宁愿不在析构函数上使用 override
。否则它无关紧要,您可以遵循您喜欢的任何指南,或者甚至不必费心遵循任何一个 - 当手头的主题没有区别时,一致性并不重要。
关于c++ - 我应该将我的派生类析构函数标记为虚拟/覆盖吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50354559/
我开始考虑在我 future 的项目或重构中实现控制反转容器,我想知道在正确设计依赖项时哪些原则(除了 GoF 模式)可能需要牢记在心。假设我需要构建一个简单的控制台应用程序,如果它可以访问互联网,它
假设我有一个 RxC contingency table 。这意味着有 R 行和 C 列。我想要一个维度为 RC × (R + C − 2) 的矩阵 X,其中包含行的 R − 1 “主效应”以及列的
我正在尝试使用 DKMS 为正在运行的内核 (4.4) 构 build 备树覆盖。我天真的 Makefile 如下: PWD := $(shell pwd) dtbo-y += my-awsome-o
我有一个 sencha touch 项目。我是用 phonegap 2.9 构建的,并且可以正常工作 device.uuid 返回到设备 ID。当我尝试使用 3.1 device.uuid 构建时抛出
我在安装了 Xcode 4.5.1 的 Mt Lion 上运行。 默认情况下,当我构建并部署到 iOS 5.1 设备时,显示会在我旋转设备时旋转,但当我部署到 iOS 6 模拟器或运行 iOS 的 i
我正在尝试使用 Google Analytics Reporting API v4 构建多折线图。 一张图表,其中我按每天的 session 计数为每个设备(台式机/平板电脑/移动设备)设置了一条线。
我一生都无法使用 xcode 组织者“自动设备配置”中的“团队配置配置文件”在 xcode 4.0.1 中将我的应用程序构建到我的 iPad 上。 该应用程序完美地构建到模拟器,但当我构建到 iPad
我是一名优秀的程序员,十分优秀!