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

问题描述 投票:5回答:1

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++ inheritance constructor destructor
1个回答
4
投票

如果虚拟基类从其继承的类未首先构建,则无法构建。因此,在您的情况下,将构造非虚拟基类,因为虚拟基类依赖于它们:CAB成立之前无法构造。因此,即使A实际上是继承的,BC的确在C之前构造。

© www.soinside.com 2019 - 2024. All rights reserved.