Udostępnij za pośrednictwem


Pełne wskaźniki

W przeciwieństwie do unikatowych wskaźników pełne wskaźniki obsługują aliasy. Oznacza to, że wiele wskaźników może odwoływać się do tych samych danych, co pokazano na poniższym rysunku:

dwa wskaźniki odwołujące się do tych samych danych

Pełny wskaźnik ma następujące cechy:

  • Może mieć wartość null.
  • Może ona ulec zmianie z wartości null na wartość inną niż null podczas wywołania. Gdy wartość zmieni się na wartość inną niż null, klaska klienta przydziela nową pamięć przydzieloną po powrocie. Program kliencki powinien zwolnić tę pamięć przed jej zakończeniem.
  • Podczas wywołania może ona ulec zmianie z wartości innej niż null na null. Gdy wartość zmieni się na null, aplikacja jest odpowiedzialna za zwalnianie pamięci.
  • Wartość może zmieniać się z jednej wartości innej niż null.
  • Magazyn, do którego wskazuje pełny wskaźnik, może uzyskać dostęp do innego wskaźnika lub nazwy w operacji.
  • Zwracane dane są zapisywane w istniejącym magazynie, jeśli wskaźnik nie ma wartości null.

Użyj atrybutu [ ptr ] , aby określić pełny wskaźnik, jak pokazano w poniższym przykładzie:

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

W tym przykładzie parametry ptrName1 i ptrName2 są definiowane jako pełne wskaźniki do ciągu. Oba wskaźniki mogą wskazywać ten sam adres pamięci zawierający pojedynczy ciąg.

[ptr] jest wymagany podczas zapewniania obsługi aliasów. Jednak ponieważ wymaga ona największego przetwarzania wszystkich wskaźników dostępnych w RPC, nie jest zalecana w przypadku większości aplikacji.