如果我有以下层次结构:
- F 类包含类型(E 类和 D 类,按此顺序声明)的成员对象
- F类继承具体类C类
- C类继承抽象/纯虚类B类
- B类继承具体类A类
如果调用 F 类对象的析构函数,将按以下顺序发生:
- F 类(最派生的)析构函数被调用并完成
- D类(成员对象2)析构函数调用完成
- E类(成员对象1)析构函数调用完成
- C 类(F 的基础)析构函数被调用并完成
- A 类(B 的基类,C 的基类)析构函数被调用并完成
- B 类(虚拟的,C 的基础)析构函数被调用并完成
这是正确的吗?所以基本上到最后 C 继承了虚拟 B,虚拟 B 继承了 A,但是 C 被破坏了,然后是 A,然后是虚拟 B?
编辑:C++ 常见问题解答说:
"Virtual base classes are special- their destructors are called at the end of the most derived class's constructor"
我想了解的是什么?
最佳答案
析构函数的执行顺序与构造函数相反。这几乎就是您需要了解的全部内容。
更新:它甚至适用于虚拟基地。您只需要意识到虚基是在任何其他基类之前构造的。
关于c++ - 继承层次结构中的析构函数顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15145298/