MST

星途 面试题库

面试题:C++类虚析构函数调用顺序的基础应用

请写出以下C++代码中虚析构函数的调用顺序,并解释原因。 class Base { public: virtual ~Base() { std::cout << "Base destructor" << std::endl; } }; class Derived : public Base { public: ~Derived() { std::cout << "Derived destructor" << std::endl; } }; int main() { Base* ptr = new Derived(); delete ptr; return 0; }
28.6万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 虚析构函数调用顺序
    • 首先调用Derived类的析构函数,输出Derived destructor
    • 然后调用Base类的析构函数,输出Base destructor
  2. 原因
    • delete ptr执行时,由于ptr指向Derived类对象(通过new Derived()创建),并且Base类的析构函数是虚函数。
    • C++的多态机制会根据对象的实际类型(这里是Derived)来调用相应的析构函数。所以首先调用Derived类的析构函数。
    • Derived类析构函数执行完毕后,会自动调用其基类Base的析构函数,这是C++中析构对象的顺序,先析构派生类部分,再析构基类部分。