对C ++的Obj-c指针已经改变

时间:2012-11-08 20:00:46

标签: c++ objective-c pointers

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

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

在FooCpp上我有:

on .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

为什么点数地址被改变了?因为我的程序出错了,有人知道为什么这个以及如何修复它?

1 个答案:

答案 0 :(得分:0)

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

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

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