在方法激活时具有两个不同实例的对象

时间:2012-06-06 08:58:15

标签: c++ visual-studio-2010 debugging

标题不是很清楚,如果有人有更好的建议请告诉我。 现在开始营业: 我正在激活一个班级的方法。

m_someObject.Clear();

问题是当我在调用之前查看m_someObject的地址时,我得到它位于某个地址,当我使用调试器输入Clear方法时,我得到了this变量位于另一个地址中。 结果是从Clear方法返回后,它似乎没有受到影响 调用它的m_someObject实例。 有谁知道什么可能导致这种行为? 使用64位Microsoft Visual Studio 2010。

4 个答案:

答案 0 :(得分:0)

可能您将m_someObject作为值传递给其他某个函数(从而获得副本)并仅在复制时执行Clear()。这样您就不会注意到原始对象的更改。

答案 1 :(得分:0)

请问您是否有两个不同的同名变量?一个在直接范围内定义,另一个在全球范围内定义?

答案 2 :(得分:0)

好吧,显然调试器在撒谎......我没有意识到这一点,但显然有些代码是在发布模式下编译的。结论 - 调试器号,printf - 是。

答案 3 :(得分:0)

最常见的原因是多重继承。与C#和Java不同,在C ++中,一个类可以有多个基类。显然,并非所有都可以位于偏移0处。这意味着如果您使用位于非零偏移的基类中的方法,则必须调整this