标题不是很清楚,如果有人有更好的建议请告诉我。 现在开始营业: 我正在激活一个班级的方法。
m_someObject.Clear();
问题是当我在调用之前查看m_someObject
的地址时,我得到它位于某个地址,当我使用调试器输入Clear
方法时,我得到了this
变量位于另一个地址中。
结果是从Clear
方法返回后,它似乎没有受到影响
调用它的m_someObject
实例。
有谁知道什么可能导致这种行为?
使用64位Microsoft Visual Studio 2010。
答案 0 :(得分:0)
可能您将m_someObject
作为值传递给其他某个函数(从而获得副本)并仅在复制时执行Clear()
。这样您就不会注意到原始对象的更改。
答案 1 :(得分:0)
请问您是否有两个不同的同名变量?一个在直接范围内定义,另一个在全球范围内定义?
答案 2 :(得分:0)
好吧,显然调试器在撒谎......我没有意识到这一点,但显然有些代码是在发布模式下编译的。结论 - 调试器号,printf - 是。
答案 3 :(得分:0)
最常见的原因是多重继承。与C#和Java不同,在C ++中,一个类可以有多个基类。显然,并非所有都可以位于偏移0处。这意味着如果您使用位于非零偏移的基类中的方法,则必须调整this
。