MST

星途 面试题库

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

假设有一个类继承体系,A 是虚基类,B 和 C 都继承自 A,D 同时继承自 B 和 C。请写出这个继承体系中,当 D 的对象被销毁时,虚基类 A 以及 B、C、D 自身析构函数的调用顺序,并简要说明原因。
19.8万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 调用顺序
    • 首先调用虚基类 A 的析构函数。
    • 然后调用 B 的析构函数。
    • 接着调用 C 的析构函数。
    • 最后调用 D 的析构函数。
  2. 原因
    • 在多重继承中,虚基类的析构函数会首先被调用,这是为了确保虚基类子对象的正确销毁。因为虚基类在派生类中只有一份实例,提前销毁它可以避免在后续销毁其他基类时可能出现的不一致问题。
    • 之后按照继承列表中基类的顺序(这里是 BC)依次调用它们的析构函数。
    • 最后调用派生类 D 自身的析构函数,因为 D 对象的销毁需要先销毁其基类部分,再销毁自身的成员。