2012-03-21 10 views
6

Tengo un objeto de la clase RTSG :: XML3D :: OpenGLMeshMA. Cuando se para en el punto de interrupción en su método RTSG :: :: XML3D OpenGLMeshMA :: onXflowStateChanged agrego las siguientes expresiones en la ventana Inspección:¿Por qué la dirección del objeto de conversión a la misma clase apunta a resultados en otro valor de objeto?

enter image description here

¿Cómo puede ser que la dirección de crudo del objeto fundido en el mismo tipo de puntero que esto da como resultado un objeto diferente (los miembros y los miembros uniqieId tienen diferentes valores en la primera y segunda filas)?

Información del sistema: VS 2008 3.5 SP1, Win 7 de 64 bits.

+0

Supongo, aunque no puedo encontrar documentación para ello, que _esto_ es la referencia interna al objeto. Mientras que el primero es la referencia externa al mismo. Lo que explica por qué solo puedes usar _this_ dentro de una instancia, no tiene referencia externa. –

+0

@JoshuaDrake ¿Qué es la referencia interna y cómo es diferente de la referencia externa? Estos son indicadores, no referencias, ¿verdad? –

+0

Un puntero es una referencia en sentido general. Ver [this (C#)] (http://msdn.microsoft.com/en-us/library/dk1507sz%28v=vs.71%29.aspx) para la versión C#. –

Respuesta

0

La única explicación razonable (aparte de un error del depurador) es que está utilizando herencia múltiple. El inicio del objeto no es 0x0a72d4e4, está en otro lugar (probablemente un puntero más alto o más bajo). La línea con el molde está obligando al depurador a tratar esa dirección como el inicio del objeto y, por lo tanto, está leyendo valores incorrectos.

Con herencia múltiple, el valor de 'esto' puede ser diferente de la dirección del inicio del objeto, y el compilador inserta los ajustes necesarios. Se discute en, p. here, here.

+0

-1: Ambas expresiones que se muestran tienen el mismo tipo. La herencia múltiple no puede explicar eso. No existe el "inicio del objeto" independientemente de su tipo, ya que cualquier objeto puede ser un subobjeto (en términos de diseño) de un objeto derivado (en términos de herencia). –

+0

Por supuesto, el objeto superior muestra el mismo tipo que el objeto en la segunda línea. Ha sido un elenco estilo C – DrPizza

+0

Por supuesto que sí. Y la herencia múltiple solo puede explicar una interpretación diferente del mismo puntero cuando el * tipo * es diferente. Supongamos que "esto" es en realidad un puntero al subobjeto OpenGLMeshMA de un objeto derivado que hereda, no virtualmente, de múltiples OpenGLMeshMA, por absurdo que parezca. Incluso así, no hay forma de que los dos (mismos) punteros señalaran diferentes instancias de OpenGLMeshMA dentro del objeto. Debe haber algo más que le ocurra a este IDE. –

Cuestiones relacionadas