首页 > 解决方案 > `virtual` `override` 析构函数

问题描述

在以下示例中:

class A {
public:
    virtual ~A() { std::cout << "~A" << std::endl; }
};

class B : public A {
public:
    virtual ~B() override { std::cout << "~B" << std::endl; }
};

class C : public B {
public:
    ~C() override { std::cout << "~C" << std::endl; }
};

clang-tidy对类给出以下警告B

'virtual' 是多余的,因为这个函数已经被声明为 'override'

从类中删除virtual关键字B似乎允许调用链中的所有析构函数,但我想确保我没有遗漏任何东西。

标签: c++c++17clang-tidy

解决方案


virtual从函数中删除override不会以任何方式改变程序的含义。这就是关键字冗余的含义(在这种情况下)。删除不允许任何未经删除不允许的内容。


推荐阅读