Siempre he tenido la impresión de que los objetos en Delphi son, de hecho, referencias a ubicaciones de memoria, que a su vez he imaginado que estaban almacenadas como variables de puntero.¿Por qué TValue.Make requiere un puntero a una referencia de objeto?
Ahora, quiero hacer un TValue de un objeto. Considere esto:
TValue.Make(AObject, TypeInfo(TMyObject), val);
donde val: TValue
. Esto no funcionará De hecho, el uso posterior de val
dará lugar a una infracción de acceso. Sin embargo, si utilizamos el operador de dirección de la siguiente manera:
TValue.Make(@AObject, TypeInfo(TMyObject), val);
todo está bien. Para mí, esto fue inesperado, ya que pensé que AObject era (bajo el capó) de hecho un puntero. ¿Estoy equivocado o es esto una peculiaridad con el método TValue.Make? ¿Puede alguien alumbrarme?
muchas gracias por un claro y sucinta explicación! – conciliator
Sutil y fundamental ... ;-) +1 –