【发布时间】:2011-12-27 17:50:27
【问题描述】:
即使我碰巧是一个子对象,我也需要获取完整对象的最前面的地址。
我的实验智能指针的当前版本只能比较完整对象和其中一个子对象的位置。它只是以字节为单位存储它们的地址和大小,并查看它们是否重叠。问题在于在多重继承的情况下比较一个完整对象的两个子对象。由于这些子对象不会相互重叠,因此它们不会被识别为属于同一对象。这将需要从子对象到完整对象的“头”的偏移量,以获得完整对象的地址以进行比较。
请注意,这种比较与访问或破坏对象无关。它只是将句柄映射到一个对象,不管句柄的子类型是什么。句柄本身负责保存类型并在不再存在对同一对象的引用时处理它。
是否可以劫持 vtable 以获得完整对象的偏移量?我一直找不到允许您执行此操作的标准功能。我的假设是滥用 vtable 高度依赖于实现,并且很可能无法在另一个编译器上重用。在对象上使用 typeid 可以计算出给定子对象的完整对象,所以我相信它是可以实现的。太糟糕了,它不会返回那个地址...
明确一点:我不需要子对象在另一个对象中的偏移量。我需要反其道而行之,在不知道完整对象类型的情况下从子对象中找到完整对象。
【问题讨论】: