2012-03-21 57 views
6

我有一個RTSG :: XML3D :: OpenGLMeshMA類的對象。當在其方法斷點停止RTSG :: XML3D :: OpenGLMeshMA :: onXflowStateChanged我添加下面的表達式到Watch窗口:爲什麼將對象的地址轉換爲相同的類,因爲這指向了另一個對象值?

enter image description here

豈是該對象的原始地址鑄成與此相同的指針類型導致不同的對象(對象和uniqieId成員在第一行和第二行中具有不同的值)?

系統信息:VS 2008 3.5 SP1,Win 7 64位。

+0

我想,雖然我找不到它的文檔,_this_是對象的內部引用。而你的第一個是外部參考。這就解釋了爲什麼你只能在實例中使用_this_,它沒有外部引用。 – 2012-04-10 15:29:33

+0

@JoshuaDrake _internal reference_和_external reference_有什麼不同?這些是指針,而不是引用,不是嗎? – 2012-04-10 16:17:18

+0

指針是一般意義上的參考。請參閱C#版本的[this(C#)](http://msdn.microsoft.com/zh-cn/library/dk1507sz%28v=vs.71%29.aspx)。 – 2012-04-10 16:25:16

回答

0

唯一合理的解釋(除了調試器錯誤)是您使用多重繼承。該對象的開始不是0x0a72d4e4,它在其他地方(可能是一個更高或更低的指針)。強制轉換的行強制調試器將該地址視爲對象的開始,因此它讀取的是不正確的值。

對於多重繼承,'this'的值可能與對象的起始地址不同,並且編譯器根據需要插入調整。它在例如herehere

+0

-1:顯示的兩個表達式都具有相同的類型。多重繼承無法解釋這一點。沒有「獨立於其類型的對象的開始」這樣的事物,因爲任何對象都可以是派生對象(以繼承術語)的子對象(以佈局術語)。 – 2012-04-12 07:38:08

+0

當然,頂部對象與第二行中的對象顯示的是相同的類型。這是C風格的演員。 – DrPizza 2012-04-12 16:06:36

+0

當然是的。當* type *不同時,多重繼承只能解釋同一個指針的不同解釋。假設「this」實際上是一個指向派生對象的OpenGLMeshMA子對象的指針,該對象從多個OpenGLMeshMA中非虛擬地繼承,看起來很荒謬。即使如此,這兩個(相同的)指針如何指向對象內的OpenGLMeshMA的不同實例也沒有辦法。這個IDE必須有其他事情發生。 – 2012-04-12 22:44:34

相關問題