Teljes mutató
Az egyedi mutatókkal ellentétben a teljes mutatók támogatják az aliasolást. Ez azt jelenti, hogy több mutató is hivatkozhat ugyanazokra az adatokra, ahogyan az az alábbi ábrán látható:
A teljes mutató a következő jellemzőkkel rendelkezik:
- Null értékű lehet.
- A hívás során null értékről nem null értékre válthat. Ha az érték nem null értékűre változik, az ügyfél csonkja a visszaadott új memóriát foglalja le. Az ügyfélprogramnak szabadíthatja fel ezt a memóriát, mielőtt leáll.
- A hívás során nem null értékről null értékre válthat. Ha az érték null értékűre változik, az alkalmazás feladata a memória felszabadítása.
- Az érték egy nem null értékű értékről egy másikra változhat.
- A teljes mutatóra mutató tárterületet a művelet egy másik mutatója vagy neve érheti el.
- A visszaadott adatok meglévő tárolóba lesznek írva, ha a mutató nem rendelkezik null értékkel.
A [ptr] attribútummal adjon meg egy teljes mutatót, ahogyan az a következő példában látható:
/* 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);
}
Ebben a példában a ptrName1 és ptrName2 paraméterek egy sztringre mutató teljes mutatóként vannak definiálva. Mindkét mutató ugyanarra a memóriacímre mutathat, amely egyetlen sztringet tartalmaz.
[ptr] szükséges az aliasok támogatásához. Mivel azonban az RPC-ben elérhető összes mutató legtöbb feldolgozását igényli, a legtöbb alkalmazáshoz nem ajánlott.