gpt4 book ai didi

c++ - 从子对象到完成对象的偏移量

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:56:45 26 4
gpt4 key购买 nike

我需要获取完整对象的最前端地址,即使我拥有的恰好是一个子对象。

我的实验性智能指针的当前版本只能比较完整对象及其子对象之一的位置。它只是简单地以字节为单位存储它们的地址和大小,并查看它们是否重叠。问题在于在多重继承的情况下比较一个完整对象的两个子对象。由于这些子对象不会相互重叠,因此它们不会被识别为属于同一对象。这将需要从子对象到完整对象的“头部”的偏移量以获得完整对象的地址以进行比较。

请注意,此比较与访问或销毁对象无关。它只是将句柄映射到一个对象,不管句柄的子类型是什么。句柄本身负责保存类型并在不再存在对同一对象的引用时将其处置。

是否可以劫持 vtable 以获得完整对象的偏移量?我一直无法找到允许您执行此操作的标准功能。我的假设是,滥用 vtable 高度依赖于实现,并且很可能无法在另一个编译器上重用。在一个对象上使用 typeid 设法计算出完整的对象被赋予一个子对象,所以我相信这是有可能实现的。太糟糕了,它不会返回那个地址......

需要说明的是:我不需要子对象在另一个对象中的偏移量。我需要反过来做,在不知道完整对象类型的情况下从子对象中找到完整对象。

最佳答案

dynamic_cast<void*>(myBaseObject);

这样做会让你得到一个指向最派生类型的指针,即最完整的对象。一旦你得到那个指针,你就可以用它做你喜欢的事。

关于c++ - 从子对象到完成对象的偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8647661/

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