我有一个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
为什么点数地址被改变了?因为我的程序出错了,有人知道为什么这个以及如何修复它?
答案 0 :(得分:0)
基础子对象具有与完整对象不同的地址并不罕见,尤其是涉及虚拟继承时。
但是,两个指针之间的差异应该很小(小于sizeof (FooCpp)
。
要么你有某种腐败(可能是不匹配的调用约定),否则Objective-C ++正在做一些非常奇怪的事情,比如撕裂代理对象。