2013-02-01 141 views
10

是的,我知道*是一個指針。這不是我說的。在我的一個程序中,我設置了一個斷點,我注意到在汽車中有一個變量__vfptr,其值爲0x000007feed210a00__vfptr類型的`*`是什麼意思?

但是在類型下,它只是說*而就是這樣。我的程序中的所有其他指針都有類型,如unsigned char*some::namespace::Frame*int*。這些都是有道理的,因爲指針直接綁定到特定的類或數據類型。但我不知道*可能是,真的只有普通的指針類型嗎?

編輯:我使用Visual Studio 2010中

+0

請你能發表確切的代碼行嗎? –

+1

你使用什麼調試器? – Necto

+1

'__vfptr'似乎表示一個指向虛函數的指針。調試器可能無法解決那裏的確切類型。 –

回答

11

__vfptr包含Virtual method table,它包含了允許動態的遺產綁定信息。

其中的信息將包括像function pointers這樣的事情來解決virtual functions和關於班級和它的父母的信息。

+2

它包含了很多moe。 –

5

答案顯然依賴於實現,並且正式涉及您的調試器,而不是C++。然而,在實踐中,_vptr的一些變體是指向_vtable的指針的標準(在通常的意義上,而不是由正式標準定義的意義上),其名稱依次包含各種信息這是解決虛擬功能和RTTI所必需的。所以_vptr是一個指針表,偏移量表和其他許多不同的東西的指針。調試器可能只是避免給這個目標命名或描述其結構。