当前位置: 首页 > 知识库问答 >
问题:

` virtual` `override `析构函数[重复]

韩宏朗
2023-03-14

在以下示例中:

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; }
};

< code>clang-tidy对等级< code>B给出以下警告:

“virtual”是多余的,因为此函数已声明为“override”

从classB中删除virtual关键字似乎允许调用链中的所有析构函数,但我希望确保没有遗漏任何内容。

共有1个答案

汤承德
2023-03-14

从具有< code>override的函数中移除< code>virtual不会以任何方式改变程序的含义。这就是关键字冗余的含义(在该上下文中)。移除不允许任何没有移除就不被允许的事情。

 类似资料:
  • 条款12:使用override声明重载函数 在C++面向对象的世界里,涉及的概念有类,继承,虚函数。这个世界最基本的概念是派生类的虚函数重写基类同名函数。令人遗憾的是虚函数重写可能一不小心就错了。给人感觉语言的这一部分设计观点是墨菲定律不是用来遵守的,只是值得尊敬的。 鉴于"重写"听起来像"重载",尽管两者完全不相关,下面就通过一个派生类和基类来说明什么是虚函数重写: class Base {

  • 本文向大家介绍php构造函数与析构函数,包括了php构造函数与析构函数的使用技巧和注意事项,需要的朋友参考一下 php构造函数是对象创建完成后,第一个自动调用的方法,析构函数是当对象被释放之前最后一个自动调用的方法。本文章向大家介绍php构造函数与析构函数。 php构造函数 1.是对象创建完成后,“第一个”“自动调用”的方法 2.构造方法的定义,方法名是一个固定的, 在php4中:和类名相同的方法

  • C++ 类 & 对象 类的构造函数 类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。 构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。 下面的实例有助于更好地理解构造函数的概念:#include <iostream> using namespace std; class Line { public: v

  • 本文向大家介绍ThreadPoolExecutor 构造函数重要参数分析?相关面试题,主要包含被问及ThreadPoolExecutor 构造函数重要参数分析?时的应答技巧和注意事项,需要的朋友参考一下 : : 核心线程数线程数定义了最小可以同时运行的线程数量。 : 当队列中存放的任务达到队列容量的时候,当前可以同时运行的线程数量变为最大线程数。 : 当新任务来的时候会先判断当前运行的线程数量是否

  • 与《 构造函数》类似,C# 中的析构函数(也被称作“终结器”)同样是类中的一个特殊成员函数,主要用于在垃圾回收器回收类实例时执行一些必要的清理操作。 C# 中的析构函数具有以下特点: 析构函数只能在类中定义,不能用于结构体; 一个类中只能定义一个析构函数; 析构函数不能继承或重载; 析构函数没有返回值; 析构函数是自动调用的,不能手动调用; 析构函数不能使用访问权限修饰符修饰,也不能包含参数。 析

  • 主要内容:析构函数的执行时机创建对象时系统会自动调用构造函数进行初始化工作,同样,销毁对象时系统也会自动调用一个函数来进行清理工作,例如释放分配的内存、关闭打开的文件等,这个函数就是析构函数。 析构函数(Destructor)也是一种特殊的成员函数,没有返回值,不需要程序员显式调用(程序员也没法显式调用),而是在销毁对象时自动执行。构造函数的名字和类名相同,而析构函数的名字是在类名前面加一个 符号。 注意:析构函数没有参数,