Почему приведение адреса объекта к тому же классу, что и этот, указывает на другое значение объекта? - PullRequest
6 голосов
/ 21 марта 2012

У меня есть объект класса RTSG :: XML3D :: OpenGLMeshMA. При остановке на точке останова в методе RTSG :: XML3D :: OpenGLMeshMA :: onXflowStateChanged я добавляю следующие выражения в окно Watch:

enter image description here

Как может получиться, что необработанный адрес объекта приведен к тому же типу указателя, так как это приводит к другому объекту (члены объекта и uniqieId имеют разные значения в первой и второй строках)?

Системная информация: VS 2008 3.5 SP1, Win 7 64-bit.

1 Ответ

0 голосов
/ 12 апреля 2012

Единственное разумное объяснение (кроме ошибки отладчика) заключается в том, что вы используете множественное наследование.Начало объекта не 0x0a72d4e4, это где-то еще (вероятно, указатель выше или ниже).Строка с приведением приводит к тому, что отладчик обрабатывает этот адрес как начало объекта и, соответственно, читает неверные значения.

При множественном наследовании значение this может отличаться от адресаначало объекта, и компилятор вставляет корректировки по мере необходимости.Это обсуждается, например, здесь , здесь .

...