如果我有以下层次结构:
如果调用类F类型的对象的析构函数,则按以下顺序执行以下操作:
这是对的吗?所以基本上到最后C继承虚拟B而虚拟B继承A,但C被破坏,然后是A,然后是虚拟B?
编辑:C ++常见问题解答说:
“虚拟基类是特殊的 - 它们的析构函数被调用 最派生类的构造函数“
的结尾
这是我想要了解的内容?
答案 0 :(得分:3)
析构函数以构造函数的相反顺序执行。这几乎是你需要知道的全部。
更新:它甚至适用于虚拟基地。您只需要意识到虚拟基础是在任何其他基类之前构建的。
答案 1 :(得分:3)
也许最简单的方法是将析构函数调用的顺序表示为算法。
F::~F() { do_this; do_that; }
该算法由语言(或编译器)执行,因此程序员只能控制第一步。
注意:每个进一步的步骤都是递归的。
析构函数调用的顺序与构造函数调用的顺序相反(很高兴知道,因为构造顺序很直观)。虚拟碱基的破坏顺序指定为
深度优先从左到右遍历基类图
幸运的是,你不需要这个,因为你只有一个。