You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何声明析构函数需声明拷贝/移动构造函数?继承NonCopyable遇Resharper提示解惑

问题2:为什么Resharper会对继承自NonCopyable的Application类发出警告?

这个问题的核心是静态代码分析工具的检查逻辑:Resharper(包括它遵循的HiCPP和CppCoreGuidelines规范)是针对当前类本身的声明做检查,不会自动追溯基类的特殊成员函数状态。

你的Application类显式写了析构函数,工具就会按照Rule of Five的要求,检查你有没有显式处理另外四个特殊成员函数。虽然基类NonCopyable已经把拷贝、移动相关的函数都delete了,派生类默认也不能调用这些函数,但工具不会自动识别这种“继承来的不可拷贝/移动性”——它只看当前类有没有显式声明这些函数。

工具的出发点其实是为了代码可读性:显式在Application里delete这些函数,能让看代码的人一眼就知道这个类是不可拷贝、不可移动的,不用去翻基类的定义。这也符合CppCoreGuidelines里“明确优于隐晦”的原则。

如果你实在不想写这些重复的代码,也可以去Resharper的规则设置里关闭这个警告,或者用注释抑制,但从代码规范的角度来说,显式声明其实是更推荐的做法,语义更清晰。

内容的提问来源于stack exchange,提问作者MiP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:21:34