【发布时间】:2014-10-02 12:23:20
【问题描述】:
C++ 常见问题解答项目 20.05:
"虚拟基类是特殊的,它们的析构函数在 最派生类的析构函数的结尾(仅)。”
我真的不明白这如何符合典型:
“先数据成员析构,后基类析构”规则
虚拟基类有什么特别之处?我不知道上面的意思是什么:s
【问题讨论】:
-
在派生类的析构函数之后调用虚拟基类析构函数,因为它们为预期在子类中实现的抽象类型提供清理功能。
-
This answer 可能有用但不能重复。
-
虚基构造函数是特殊的——它们总是在任何非虚基类的构造函数之前被首先调用。破坏总是以与构造相反的顺序执行。因此,虚基析构函数的特殊之处在于它们总是被最后调用。
-
一个 virtual 基础(强调添加在 virtual 上)满足菱形模式,因为基础的单个“实例”由多个共享在到达主要事件之前的中间推导(最衍生的)。正如最派生的构造函数必须直接调用虚基的构造一样,在最派生的析构函数的结束处进行销毁也是如此。这与传统的常规(非虚拟)基础不同。听起来您对虚拟 base 和虚拟 destructor 感到困惑。
-
这就是我要说的:“特殊性”实际上是按构造顺序排列的。破坏的顺序就从那开始。为什么FAQ选择强调析构函数,我不确定。也许这句话在上下文中更有意义。
标签: c++ polymorphism destructor