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

时间:2011-08-16 12:48:09

标签: 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

每个班级都有一个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 . . .

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

我做错了什么?

编辑:要清除我的问题,根据我的理解,此行为与基类是否为虚拟无关。但引用坚持虚拟基类。我清楚还是在那里钓鱼?

感谢。

1 个答案:

答案 0 :(得分:3)

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