虚拟析构函数C++

Virtual Destructor C++

本文关键字:C++ 析构函数 虚拟      更新时间:2023-10-16

我知道,如果我们想调用已分配给 base 指针的派生对象的析构函数,我们希望将基本析构函数设置为虚拟的。但是,如果我们有这样的东西:

#include <iostream>
using namespace std;
class base
{
public:
base() { cout << "Base Constructor Calledn"; }
virtual ~base() { cout << "Base Destructor calledn"; }
};
class derived1 :public base
{
public:
derived1() { cout << "Derived1 constructor calledn"; }
~derived1() { cout << "Derived1 destructor calledn"; }
 };
 class derived2 : public derived1
 {
public:
derived2() { cout << "Derived2 constructor calledn"; }
~derived2() { cout << "Derived2 destructor calledn"; }
  };
class derived3 : public derived2
{
  public:
derived3() { cout << "Derived3 constructor calledn"; }
~derived3() { cout << "Derived3 destructor calledn"; }
 };

我们有这样的主要功能:

int main (){
base* ptr=new derived3;
delete ptr;

输出为:
Base Constructor Called Derived1 constructor called Derived2 constructor called Derived3 constructor called Derived3 destructor called Derived2 destructor called Derived1 destructor called Base Destructor called

这调用 base,派生 1,派生 2 和派生 3 析构函数,工作正常。 我们只将基本析构函数设置为虚拟。
为什么没有必要将派生 1 和派生 2 析构函数设置为虚拟以产生相同的结果?

从具有虚拟析构函数的类派生的所有类都隐式具有虚拟析构函数。

这适用于类层次结构中的任何成员函数。

一旦你声明一个函数为 virtual ,它隐式地保持virtual在所有派生类中。