从子对象到完整对象的偏移量

Offset to complete object from subobject

本文关键字:对象 偏移量      更新时间:2023-10-16

我需要得到一个完整对象的最前面的地址,即使我所拥有的恰好是一个子对象。

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

注意,这种比较与访问或析构对象无关。它只能将句柄映射到对象,而不管句柄的子类型是什么。句柄本身负责保存该类型,并在不再存在对同一对象的引用时处理该类型。

是否有可能劫持虚函数表以获得完整对象的偏移量?我找不到一个标准函数来做这个。我的假设是,虚函数表的滥用是高度依赖于实现的,很可能无法在其他编译器上重用。在对象上使用typeid可以计算出给定子对象的完整对象是什么,所以我相信这是可能实现的。可惜它不会返回那个地址…

澄清一下:我不需要子对象在另一个对象中的偏移量。我需要用另一种方式来做,从子对象中找到完整的对象,而不知道完整对象的类型。

dynamic_cast<void*>(myBaseObject);

这样做将获得一个指向最派生类型的指针,即最完整的对象。一旦你有了那个指针你就可以随心所欲了