即使我碰巧是子对象,我也需要获取完整对象的最前面地址。

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

请注意,此比较与访问或销毁对象无关。无论句柄的子类型是什么,都仅将句柄映射到对象。一旦不再存在对同一对象的引用,则句柄本身负责保存类型并进行处理。

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

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

最佳答案

dynamic_cast<void*>(myBaseObject);
这样做将为您提供最派生类型的指针,即最完整的对象。一旦有了该指针,就可以执行自己喜欢的操作。

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

10-11 22:55
查看更多