Иерархия наследования: последовательность выполнения конструктора и деструктора - PullRequest
5 голосов
/ 16 августа 2011

Здесь 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 . . .

но, согласно цитате, сначала должны выполняться конструкторы виртуальных базовых классов.

что я не так понял?

EDIT: Чтобы очистить мой вопрос, согласно моему пониманию, это поведение не имеет никакого отношения к тому, является ли базовый класс виртуальным или нет.но цитата настаивает на Виртуальный базовый класс .Я ясно или что-то подозрительное там?

Спасибо.

1 Ответ

3 голосов
/ 16 августа 2011

Виртуальные базовые классы не могут быть созданы, если классы, от которых они наследуются, не создаются первыми. Так что в вашем случае не виртуальные базовые классы создаются, потому что от них зависят виртуальные: C не может быть построено до тех пор, пока A и B не будут. Следовательно, A и B действительно созданы до C, хотя C фактически наследуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...