gpt4 book ai didi

C++ "this"与调用的对象方法不匹配

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:05:18 26 4
gpt4 key购买 nike

我在 Microsoft Visual C++ 2003 下运行我的 C++ 程序时遇到了一个看起来很烦人的错误,但这可能只是我做错了什么所以我想把它扔在这里看看是否有人有想法。

我有这样的类层次结构(完全一样 - 例如,实际代码中没有多重继承):

class CWaitable
{
public:
void WakeWaiters() const
{
CDifferentClass::Get()->DoStuff(this); // Breakpoint here
}
};

class CMotion : public CWaitable
{
virtual void NotUsedInThisExampleButPertinentBecauseItsVirtual() { }
};

class CMotionWalk : public CMotion
{ ... };

void AnnoyingFunctionThatBreaks(CMotion* pMotion)
{
pMotion->WakeWaiters();
}

好的,所以我用“CMotionWalk”实例调用“AnnoyingFunctionThatBreaks”(例如,调试器说它是 0x06716fe0),一切似乎都很好。但是当我进入它时,到调用“DoStuff”时的断点,“this”指针与我调用该方法的 pMotion 指针具有不同的值(例如,现在调试器说高一个字 - 0x06716fe4)。

换句话说:pMotion 的值为 0x06716fe0,但当我对其调用方法时,该方法将“this”视为 0x06716fe4。

我不会发疯吧?这很奇怪,对吧?

最佳答案

我相信您只是看到了编译器构建 vtable 的方式的产物。我怀疑 CMotion 有它自己的虚函数,因此你最终会在派生对象中使用偏移量来到达基础对象。因此,不同的指针。

如果它正常工作(即如果这不会产生崩溃,并且对象外部没有指针)那么我就不会太担心了。

关于C++ "this"与调用的对象方法不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/669105/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com