OBJ-C指向C 的指针已更改

Obj-c pointer to C++ has changed

本文关键字:指针 指向 OBJ-C      更新时间:2023-10-16

我有一个c 类foocpp,c 接口ifoo和obj-c class 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("%pn",p);
}

和在fooobjc上,我称之为:

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

当我这样做时,我将获得以下日志:

0x848f520
0x61630002

为什么要更改点地址?因为我在程序上遇到了一个错误,所以有人知道为什么这样做以及如何修复它?

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

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

您要么有某种腐败(也许是不匹配的呼叫惯例),要么Objective-C 正在做一些很奇怪的事情,例如撕裂的代理对象。