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