2012-06-06 48 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

相关问题