继承层次结构:构造函数和析构函数执行序列

Azo*_*ous 6 c++ inheritance constructor destructor

这里http://www.parashift.com/c++-faq-lite/multiple-inheritance.html节[25.14]说:

要执行的第一个构造函数是层次结构中任何位置的虚拟基类.

我尝试使用以下程序验证它:

           A (pure virtual)
           |
           B
           |
           C
(virtual)/   \ (virtual)
       E       D
         \   /
           F
           |
           G (pure virtual)
           |
           H
Run Code Online (Sandbox Code Playgroud)

每个班级都有一个c'tor和virtual d'tor.输出如下:

A
B
C
E
D
F
G
H
~H
~G
~F
~D
~E
~C
~B
~A
Press any key to continue . . .
Run Code Online (Sandbox Code Playgroud)

但根据引用,应首先执行虚拟基类构造函数.

我做错了什么?

编辑:要清除我的问题,根据我的理解,这种行为与基类是否是虚拟无关.但引用坚持Virtual Base类.我清楚还是有什么可疑的?

谢谢.

era*_*ran 5

如果虚拟基类所继承的类不是首先构造的,则无法构造。因此,在您的情况下,将构造非虚拟基类,因为虚拟基类依赖于它们:CA和之前不能构造B。因此,AB确实以前建造的C,即使C是虚拟继承。

  • @ Azodious,C ++常见问题解答很棒,但是我想在这种情况下,缺乏进一步的解释实际上可能会引起误解。虚拟基类是在任何地方都首先构造的,但在任何情况下,构造它们都涉及构造其基。没有其他方法可以使它工作,因为类必须能够依赖于其基础的初始化。 (2认同)