【发布时间】:2013-02-28 20:45:11
【问题描述】:
如果我有以下层次结构:
- 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++ 常见问题解答说:
“虚拟基类是特殊的——它们的析构函数在 最派生类的构造函数的结尾"
这是我想要理解的?
【问题讨论】:
-
描述有点混乱:它不是虚拟的类,而是继承。所以你的 C 类实际上继承了 B 类,或者你可以说 B 是 C 的 虚基。当然,B 是抽象的,它包含纯虚函数,但顺序无关紧要构造函数/析构函数。
-
@anatolyg 那么您将如何重新措辞 C++FAQ,因为我完全被它所说的弄糊涂了?
标签: c++ inheritance polymorphism virtual-destructor