Мне нужно получить самый передний адрес всего объекта, даже если то, что у меня есть, является подобъектом.
Текущая версия моего экспериментального интеллектуального указателя может сравнивать только местоположение полного объекта и одного из его подобъектов. Просто храните их адреса и размеры в байтах и смотрите, не перекрываются ли они. Проблема заключается в сравнении двух подобъектов полного объекта в случае множественного наследования. Поскольку эти подобъекты не будут перекрывать друг друга, они не будут распознаваться как принадлежащие одному и тому же объекту. Это потребовало бы смещения «головы» всего объекта от подобъекта, чтобы получить адрес полного объекта для сравнения.
Обратите внимание, что это сравнение не имеет ничего общего с доступом к объектам или их разрушением. Это только для отображения дескрипторов на объект, независимо от того, какой подтип дескриптора. Сам дескриптор отвечает за хранение типа и его удаление, если больше не существует ссылок на один и тот же объект.
Можно ли перехватить виртуальную таблицу, чтобы получить смещение для всего объекта? Мне не удалось найти стандартную функцию, которая позволяет вам сделать это. Мое предположение состоит в том, что злоупотребление vtable сильно зависит от реализации и, скорее всего, не будет повторно использоваться на другом компиляторе. Использование typeid на объекте позволяет определить, какой объект передается подобъекту, поэтому я считаю, что этого можно достичь. Жаль, что этот адрес не вернется ...
Просто чтобы прояснить: мне не нужно смещение подобъекта внутри другого объекта. Мне нужно сделать это наоборот и найти полный объект из подобъекта, не зная тип полного объекта.