0

我有一个 C++ 类 FooCpp、一个 C++ 接口 IFOO 和一个 Obj-c 类 FooObjC,在 IFOO 上我有:

public:
    virtual ~IFOO() {};
    virtual void seePointer(FooCpp* p);

在 FooCpp 我有:

在.h

class FooCpp : virtual public IFOO {
public:
    virtual ~FooCpp() {};
    void seePointer(FooCpp* p);
}

和.cpp

void FooCpp::seePointer(IFOO* p){
    printf("%p\n",p);
}

在 FooObjC 我称之为:

FooCpp *foo = new FooCpp();
FooCpp *f = new FooCpp();
printf("%p\n",f);
foo->seePointer(f);

当我这样做时,我得到了以下日志:

0x848f520
0x61630002

为什么点地址被改变了?因为这是我的程序出错,有人知道为什么会这样以及如何解决它?

4

1 回答 1

0

基本子对象具有与完整对象不同的地址并不罕见,尤其是在涉及虚拟继承时。

但是,两个指针之间的差异应该很小(小于sizeof (FooCpp).

要么你有某种损坏(可能是不匹配的调用约定),要么 Objective-C++ 正在做一些非常奇怪的事情,比如撕掉代理对象。

于 2012-11-08T20:55:17.337 回答