Dela via


Fullständiga pekare

Till skillnad från unika pekare stöder fullständiga pekare alias. Det innebär att flera pekare kan referera till samma data, som du ser i följande bild:

två pekare som refererar till samma data

En fullständig pekare har följande egenskaper:

  • Det kan ha värdet null.
  • Den kan ändras från null till icke-null under anropet. När värdet ändras till icke-null allokerar klientens stub nytt minne som allokerats vid retur. Klientprogrammet bör frigöra det här minnet innan det avslutas.
  • Den kan ändras från icke-null till null under anropet. När värdet ändras till null ansvarar programmet för att frigöra minnet.
  • Värdet kan ändras från ett värde som inte är null till ett annat.
  • Lagringen som en fullständig pekare pekar på kan nås av en annan pekare eller ett annat namn i åtgärden.
  • Returdata skrivs till befintlig lagring om pekaren inte har värdet null.

Använd attributet [ ptr ] för att ange en fullständig pekare, som du ser i följande exempel:

/* 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);
}

I det här exemplet definieras parametrarna ptrName1 och ptrName2 som fullständiga pekare till en sträng. Det är möjligt för båda pekarna att peka på samma minnesadress som innehåller en enda sträng.

[ptr] krävs när du tillhandahåller aliasstöd. Men eftersom det kräver mest bearbetning av alla pekare som är tillgängliga i RPC rekommenderas det inte för de flesta program.