2014-09-23 77 views
2

我遇到了这个问题,想知道答案是什么?虚拟功能及其开销

以下哪个选项描述了具有五个虚拟功能的类 的预期开销?

A.所述类的每个对象保留保持 的5个虚函数

B.类的每个对象的地址的结构的地址保持的五个虚拟 函数的地址

C.该类的每个对象都保存下一个虚拟函数的地址。

D.该类的每个对象都包含保存虚拟函数地址的链接列表对象 的地址。

E.该类的每个对象都将类声明的地址 保存在内存中,通过该地址解析虚函数调用。

我对虚拟表很熟悉,每个类都有一个虚拟表,表示哪个虚拟功能指向哪个实现。但是我不确定类的实例如何与该虚拟表进行通信。我的猜测是A.请让我知道,如果我是对/错,也是对答案的一些解释。

+0

请参阅http://stackoverflow.com/a/203136/1611055:每个对象(属于具有至少一个虚函数的类)都有一个指针,称为vptr。它指向其实际类的vtbl。答案还表明,这不是标准的一部分,所以不同的编译器**可能**以不同的方式实现它。然而,答案“A”将是与相关答案相匹配的答案。 – 2014-09-23 07:31:14

+0

谢谢安德烈亚斯,你可以把它解释为答案 – Rajeshwar 2014-09-23 07:36:59

+1

你可以消除两个选项,因为它们没有任何意义;和另外两个(对于任何明智的实现),其对于大量的虚拟功能和/或对象而言严重缩放。这留下了一个明智的选择。 – 2014-09-23 07:37:50

回答

4

我觉得正式的标准没有规定的V-表是如何实现的,但我也说了答案A.

http://en.wikipedia.org/wiki/Virtual_method_table

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3797.pdf

10.3节未指定任何具体实施。

从部分10.3 “虚拟符意味着会员资格,所以一个虚拟函数不能是一个非成员(7.1.2) 功能,也不可以将虚拟函数是一个静态成员,由于一个虚拟函数调用依赖于特定用于确定要调用哪个函数的对象“

没有更多。