首页 > 解决方案 > C++虚函数继承

问题描述

#include <iostream>
class a{
  public:
    a(){};
    virtual ~a(){
      std::cout << "del class a";
    }
};

class b: public a{
  public:
    ~b(){
      std::cout << "del class b";
    } 
};

int main(){

    a *pa;
    pa = new b;
    delete pa;

}

嗨,我对 C++ 相当陌生。看上面的代码示例,class b没有虚析构函数,但是当程序执行时,输出的是 del class bthen del class a

我想知道为什么会这样,因为我没有在class b. 这是否意味着通过将基析构函数声明为虚拟,派生类的“虚拟性”是隐含的?谢谢。

标签: c++polymorphism

解决方案


即使析构函数不是继承的,如果基类声明它的析构函数是虚拟的,派生的析构函数总是会覆盖它。这使得通过指向基址的指针删除动态分配的多态类型对象成为可能。

您可以在Cppreference-Virtual 析构函数中找到更多信息


推荐阅读