c++ - 继承层次结构中的析构函数顺序

标签 c++ inheritance polymorphism virtual-destructor

如果我有以下层次结构:

  • F 类包含类型(E 类和 D 类,按此顺序声明)的成员对象
  • F类继承具体类C类
  • C类继承抽象/纯虚类B类
  • B类继承具体类A类

如果调用 F 类对象的析构函数,将按以下顺序发生:

  1. F 类(最派生的)析构函数被调用并完成
  2. D类(成员对象2)析构函数调用完成
  3. E类(成员对象1)析构函数调用完成
  4. C 类(F 的基础)析构函数被调用并完成
  5. A 类(B 的基类,C 的基类)析构函数被调用并完成
  6. 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/

相关文章:

c++ - 理解策略模式

c++ - QWidget 改造

Javascript 继承错误行为

java - Hibernate 多态 HQL SELECT 语句

带有自身类类型的 TypeScript 克隆自身实例

c++ - 为什么程序启动缓慢但后来获得全速?

C++重载函数问题

Javascript - 在构造函数中使用左侧赋值更改对象

list - 类型 ('a -> ' b) list 的函数 -> OCaml 中的 'a -> ' b list

c++ - sf::Sprite 是白色矩形(纹理试图通过引用传递)