2

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

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

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

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

  3. 支持者提出了一个成功的论点。添加一个级别将为标记和清除垃圾收集中的标记阶段提供支持(其中首先标记所有可访问的对象,然后释放不可访问的对象)。他们的论点依赖于附加层次中的什么特征?

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

4

1 回答 1

3

由于我没有上过你的课程,我只能猜测:

1:C++ 是一种乐高工具包——你拿走你需要的东西,你可以留下其他的东西。您也不必为此付费。添加这个额外的级别需要一些初始化和一些东西,我想你不能选择不使用它——即使你不需要它。

2:使用 vtable 的类的 RTTI

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

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

于 2013-08-05T09:35:04.043 回答