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

Object having two different instances at method activation

本文关键字:两个 实例 对象 激活 方法      更新时间:2023-10-16

标题不是那么清楚,如果有人有更好的建议,请告诉我。现在进入正题:我正在激活一个类的方法。

m_someObject.Clear();

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

可能你m_someObject作为值传递给其他函数(从而获得副本)并仅在副本上执行Clear()。这样,您就不会注意到原始对象的变化。

你能检查一下你是否有两个同名的不同变量吗?一个在直接范围内定义,另一个,也许在全局范围内定义?

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

好吧,显然调试器在撒谎。我不知道这一点,但显然一些代码是在发布模式下编译的。结论 - 调试器否,printf - 是。