gpt4 book ai didi

传递给函数时,this 的 C++ 地址不同

转载 作者:行者123 更新时间:2023-12-01 14:35:45 25 4
gpt4 key购买 nike

我有一个非常有趣的观察结果,可能是意料之中的,也可能不是意料之中的。我有两个非常复杂的类,每个类都扩展了许多其他不相关的类。作为引用,一个是套接字,一个是虚拟设备。在构建虚拟设备期间,我想将设备地址传递给套接字对象。套接字对象也是虚拟设备的一部分。基本上是这样的

class TcpSocket : public Socket, public OtherThing {
void Init(OtherOtherClass *device){
printf("0x%x\n", device); //0x1aaaf794
}
};

class Device : public OtherClass, public OtherOtherClass {
Device(){
printf("0x%x\n", this); //0x1aaaf6d0
this->socket.Init(this);
printf("0x%x\n", this); //0x1aaaf6d0
}
TcpSocket socket;
};

无法在沙箱环境中重现这个,但是当我打印出地址时,它们是不同的。所以也许我会问这个问题。

在函数 TcpSocket::Init 中,它需要一个 OtherOtherClass* 而不是 Device*。这就是地址看起来不同的原因吗?

最佳答案

是的。

Device 有几个基类。将 Device* 指针转换为 OtherOtherClass* 指针时,值会有所不同,因为新指针将指向 OtherOtherClass 的实例在 Device 的实例中。

关于传递给函数时,this 的 C++ 地址不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63421321/

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