2014-09-23 76 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) 功能,也不可以將虛擬函數是一個靜態成員,由於一個虛擬函數調用依賴於特定用於確定要調用哪個函數的對象「

沒有更多。