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和一个虚拟d'tor。输出如下:
A
B
C
E
D
F
G
H
~H
~G
~F
~D
~E
~C
~B
~A
Press any key to continue . . .
但是根据引用,虚拟基类的构造函数应首先执行。
我理解错了什么?
EDIT:为了澄清我的问题,据我了解,此行为与基类是否为虚拟无关。但是引用坚持使用Virtual Base class。我在那里清楚还是有腥?
如果虚拟基类从其继承的类未首先构建,则无法构建。因此,在您的情况下,将构造非虚拟基类,因为虚拟基类依赖于它们:C
在A
和B
成立之前无法构造。因此,即使A
实际上是继承的,B
和C
的确在C
之前构造。