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

修复基类A虚析构后,Clang-Tidy未检测子类B缺失虚析构的问题咨询

问题:修复基类虚析构函数后,Clang-Tidy未检测子类的非虚析构函数警告

最小可复现示例(MWE)

初始代码(reference.cpp)

#include <iostream>

class A {
    public:
        virtual void foo() = 0;
};

class B : public A {
    public:
        void foo() override {
            std::cout << "test";
        }
};

执行Clang-Tidy命令

clang-tidy -checks="cppcoreguidelines-virtual-class-destructor" ./reference.cpp --

首次执行输出

42 warnings generated.
/workspace/test/reference.cpp:3:7: warning: destructor of 'A' is public and non-virtual [cppcoreguidelines-virtual-class-destructor]
class A {
      ^
/workspace/test/reference.cpp:3:7: note: make it public and virtual
class A {
      ^
/workspace/test/reference.cpp:8:7: warning: destructor of 'B' is public and non-virtual [cppcoreguidelines-virtual-class-destructor]
class B : public A {
      ^
/workspace/test/reference.cpp:8:7: note: make it public and virtual
class B : public A {
      ^
Suppressed 40 warnings (40 in non-user code).

修复基类后的代码

#include <iostream>

class A {
    public:
        virtual void foo() = 0;
        virtual ~A() = default;
};

class B : public A {
    public:
        void foo() override {
            std::cout << "test";
        }
};

再次执行Clang-Tidy的输出

40 warnings generated.
Suppressed 40 warnings (40 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.

问题说明

修复基类A的虚析构函数后,子类B仍未显式定义虚析构函数,但Clang-Tidy不再触发警告,如何让工具检测出子类B的这个情况?

环境信息

clang-tidy --version
LLVM (http://llvm.org/):
  LLVM version 14.0.5
  Optimized build.
  Default target: x86_64-redhat-linux-gnu
  Host CPU: skylake

解决方案

这是C++标准和Clang-Tidy检查规则共同作用的结果:

  • 当基类拥有虚析构函数时,子类的析构函数会自动隐式成为虚函数,无需显式声明virtual关键字,完全符合多态类的内存安全要求。
  • Clang-Tidy的cppcoreguidelines-virtual-class-destructor检查仅针对两类问题:一是本身包含虚函数但无虚析构函数的类;二是继承自无虚析构函数的多态类的子类。修复基类后,子类B的隐式虚析构函数已经满足规范,因此工具不会触发警告。

如果是出于代码风格要求需要显式声明子类的虚析构函数,可手动添加virtual ~B() = default;,但这并非语法或安全层面的强制要求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 21:27:41