Punteros completos
A diferencia de punteros de únicos, los punteros completos admiten alias. Esto significa que varios punteros pueden hacer referencia a los mismos datos, como se muestra en la ilustración siguiente:
de 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 nueva memoria asignada a la devolución. El programa cliente debe liberar esta memoria antes de que finalice.
- Puede cambiar de no 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 al que puede tener acceso 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 el 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.