2012-06-06 47 views
1

標題不太清楚,如果有人有更好的建議,請告訴我。 現在公司: 我正在激活一個類的方法。在方法激活時有兩個不同實例的對象

m_someObject.Clear(); 

的問題是,當我看的m_someObject呼叫前的地址,我得到它坐落在一個特定的地址,當我進入Clear方法與調試我得到this變量位於在另一個地址。 結果是,從Clear方法返回後,它似乎沒有影響
m_someObject實例調用它。 有沒有人知道可能會導致這種行爲? 使用Microsoft Visual Studio 2010 64位。

+0

你有Java或C#背景嗎? –

+0

@phresnel - 我知道,爲什麼? –

+0

我猜你可能正在傳遞m_someObject來通過值來運行函數,對於相同的語法,它在C#和Java中有不同的語義。 –

回答

0

也許您將m_someObject作爲值傳遞給某個其他功能(從而獲得副本)並僅在副本上執行Clear()。這樣你就不會注意到原始對象的變化。

+0

我正在一步一步地用調試器,在進入(和退出之後)Clear方法之前,m_someObject有一個地址,並且在方法裏面有另一個地址.. –

+0

你的代碼和這個代碼段有什麼區別? http://ideone.com/WP091 – Greg

+0

這不僅代碼打印這兩種情況下相同的地址,並且我不... –

0

你能否請你檢查一下你是否有兩個不同的變量名稱相同?一個在直接範圍內定義,另一個在全球範圍內定義?

0

好吧,顯然調試器在說謊..我沒有意識到這一點,但顯然有些代碼是在發佈模式下編譯的。結論 - 調試器否,printf - 是的。

0

最常見的原因是多重繼承。與C#和Java不同,在C++中,一個類可以有多個基類。顯然,不是所有的都可以位於偏移量0.這意味着如果您使用位於非零偏移量的基類中的方法,則必須調整this

相關問題