Если у меня есть следующая иерархия:
Если вызывается деструктор для объекта типа Class F, происходит следующее в следующем порядке:
это правильно? Таким образом, в основном к концу C наследует виртуальный B, а виртуальный B наследует A, но C уничтожается, затем A, затем виртуальный B?
РЕДАКТИРОВАТЬ: C ++ часто задаваемые вопросы говорит:
«Виртуальные базовые классы особенные — их деструкторы вызываются на
конец конструктора самого производного класса «
что я пытаюсь понять?
Деструкторы выполняются в обратном порядке конструкторов. Это почти все, что вам нужно знать.
ОБНОВЛЕНИЕ: Это верно даже для виртуальных баз. Вам просто нужно понять, что виртуальные базы создаются раньше любого другого базового класса.
Возможно, проще всего выразить порядок вызовов деструкторов в виде алгоритма.
F::~F() { do_this; do_that; }
Этот алгоритм выполняется языком (или компилятором), поэтому программист может контролировать только первый шаг.
Примечание: каждый из дальнейших шагов является рекурсивным.
Порядок вызовов деструктора является обратным порядком вызовов конструктора (это полезно знать, потому что порядок построения интуитивно понятен). Порядок уничтожения виртуальных баз указан как
обход слева направо в глубину графа базовых классов
К счастью, вам это не нужно, потому что у вас есть только один.