Leer en inglés

Compartir a través de


Punteros completos

A diferencia de los punteros únicos , los punteros completos admiten el alias. Esto significa que varios punteros pueden hacer referencia a los mismos datos, como se muestra en la ilustración siguiente:

dos punteros que hacen referencia a los mismos datos

Un puntero completo tiene las siguientes características:

  • Puede tener el valor NULL.
  • Puede cambiar de null a no null durante la llamada. Cuando el valor cambia a distinto de NULL, el código auxiliar del cliente asigna una nueva memoria asignada al devolver. El programa cliente debe liberar esta memoria antes de que finalice.
  • Puede cambiar de distinto de NULL a NULL durante la llamada. Cuando el valor cambia a NULL, la aplicación es responsable de liberar la memoria.
  • El valor puede cambiar de un valor distinto de NULL a otro.
  • El almacenamiento al que apunta un puntero completo puede ser accedido por otro puntero o nombre en la operación.
  • Los datos devueltos se escriben en el almacenamiento existente si el puntero no tiene el valor NULL.

Use el atributo [ ptr ] para especificar un puntero completo, como se muestra en el ejemplo siguiente:

/* IDL file */
[ 
  uuid(ba209999-0c6c-11d2-97cf-00c04f8eea45),
  version(1.0)
]
interface FullPtrInterface
{
  void RemoteFn([in,ptr,string]) char *ptrName1,
                [in,ptr,string]  char *ptrName2);
}

En este ejemplo, los parámetros ptrName1 y ptrName2 se definen como punteros completos a una cadena. Es posible que ambos punteros apunten a la misma dirección de memoria que contiene una sola cadena.

[ptr] es necesario al proporcionar compatibilidad con alias. Sin embargo, dado que requiere el mayor procesamiento de todos los punteros disponibles en RPC, no se recomienda para la mayoría de las aplicaciones.