为什么将对象的地址转换为同一个类,这指向另一个对象值?

Ser*_*rov 6 casting watch visual-studio-2008

我有一个类RTSG :: XML3D :: OpenGLMeshMA的对象.当在其方法RTSG :: XML3D :: OpenGLMeshMA :: onXflowStateChanged中的断点处停止时,我将以下表达式添加到Watch窗口中:

在此输入图像描述

如何将对象的原始地址转换为相同的指针类型,从而导致不同的对象(对象和uniqieId成员在第一行和第二行中具有不同的值)?

系统信息:VS 2008 3.5 SP1,Win 7 64位.

DrP*_*zza 0

唯一合理的解释(除了调试器错误)是您正在使用多重继承。对象的开头不是0x0a72d4e4,它在其他地方(可能是更高或更低的指针)。带有强制转换的行强制调试器将该地址视为对象的开头,因此它会读取错误值。

对于多重继承,“this”的值可以与对象起始地址不同,编译器会根据需要插入调整。例如,此处此处对此进行了讨论。