1

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

m_someObject.Clear();

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

4

4 回答 4

0

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

于 2012-06-07T08:56:27.433 回答
0

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

于 2012-06-07T09:28:13.787 回答
0

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

于 2012-06-06T09:48:04.953 回答
0

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

于 2012-06-06T09:10:05.517 回答