将元类级别添加到C ++对象模型

时间:2013-08-05 09:25:20

标签: c++ garbage-collection metaclass virtual-destructor object-model

有人可以解释有关C ++对象模型的理论问题吗?这是我最近的一次考试,我很难过。

问题: 注意到Java,C#和Smalltalk的成功,C ++标准委员会决定在语言的对象模型中增加一个额外的级别。也就是说,每个类都应该有一个在运行时具有表示的元类。

  1. 反对者说,这与语言的基本原则之一相矛盾。哪一个?解释

  2. 反对者还声称C ++有一个额外的半级"它允许完整的元类级别的一些功能。这是什么"半级"什么样的分支享有它的能力?

  3. 支持者们提出了一个胜利的论点。添加一个级别将为Mark&中的Mark阶段提供支持。扫描垃圾收集(首先标记所有可到达的对象,然后释放不可访问的对象)。他们的论点依赖于附加级别的哪些功能?

  4. 此外,支持者提出了另一个论点。即使没有垃圾收集系统,额外的级别也会使虚拟析构器变得多余。解释何时以及为何需要虚拟析构函数以及额外级别如何消除该要求?

1 个答案:

答案 0 :(得分:3)

由于我没有参加你的课程,我只能猜测:

1:C ++是一种乐高套件 - 你可以随心所欲地拿走你所需要的一切。您也不必为此付费。添加这个额外的级别需要一些初始化和东西,我想你不能选择不使用它 - 即使你不需要它。

2:具有vtable的类的RTTI

3:我只能猜测 - 我认为类的所有实例都可以通过元类以某种方式访问​​,或者可以通过扫描内存来检测。如果是这种情况,您可以实施mark& sweep。

4:如果通过具有其中一个基类类型的指针销毁类实例,则需要虚拟析构函数。如果你可以从每个实例到达元类,那么你可以调用正确的析构函数,而无需在vtable中查找它。