interior_ptr (C++/CLI)

Un puntatore interno dichiara un puntatore all'interno di un tipo riferimento, ma non all'oggetto stesso. Un puntatore interno può puntare a un handle di riferimento, un tipo di valore, un handle di tipo boxed, un membro di un tipo gestito o un elemento di una matrice gestita.

Tutti i runtime

Non esistono note per questa funzionalità del linguaggio che si applichino a tutti i runtime.

Windows Runtime

Non esistono note per questa funzionalità del linguaggio che si applichino solo a Windows Runtime.

Requisiti

Opzione del compilatore: /ZW

Common Language Runtime

Nell'esempio di sintassi seguente viene illustrato un puntatore interno.

Sintassi

cli::interior_ptr<cv_qualifier type> var = &initializer;

Parametri

cv_qualifier
const o volatile qualificatori.

type
Tipo di initializer.

var
Nome della variabile interior_ptr.

initializer
Membro di un tipo di riferimento, elemento di una matrice gestita o qualsiasi altro oggetto che è possibile assegnare a un puntatore nativo.

Osservazioni:

Tramite un puntatore nativo non è possibile tenere traccia di un elemento mentre la relativa posizione cambia nell'heap gestito a causa dello spostamento di istanze di un oggetto da parte del Garbage Collector. Affinché il riferimento di un puntatore all'istanza sia corretto, il puntatore deve essere aggiornato dal runtime in base all'oggetto appena posizionato.

Un oggetto interior_ptr rappresenta un superset della funzionalità di un puntatore nativo. Qualsiasi elemento che può essere assegnato a un puntatore nativo può quindi anche essere assegnato a un oggetto interior_ptr. In un puntatore interno può essere eseguito lo stesso set di operazioni dei puntatori nativi, inclusi il confronto e l'aritmetica dei puntatori.

Un puntatore interno può essere dichiarato solo nello stack e non come membro di una classe.

Poiché i puntatori interni sono disponibili solo nello stack, se si accetta l'indirizzo di un puntatore interno viene generato un puntatore non gestito.

interior_ptr ha una conversione implicita in bool, che ne consente l'uso nelle istruzioni condizionali.

Per informazioni su come dichiarare un puntatore interno che punta a un oggetto che non può essere spostato nell'heap sottoposto a Garbage Collection, vedere pin_ptr.

interior_ptr si trova nello spazio dei nomi cli. Per altre informazioni, vedere Spazi dei nomi Platform, default e cli.

Per ulteriori informazioni sui puntatori interni, vedere

Requisiti

Opzione del compilatore: /clr

Esempi

Nell'esempio riportato di seguito viene mostrato come dichiarare e utilizzare un puntatore interno in un tipo di riferimento.

// interior_ptr.cpp
// compile with: /clr
using namespace System;

ref class MyClass {
public:
   int data;
};

int main() {
   MyClass ^ h_MyClass = gcnew MyClass;
   h_MyClass->data = 1;
   Console::WriteLine(h_MyClass->data);

   interior_ptr<int> p = &(h_MyClass->data);
   *p = 2;
   Console::WriteLine(h_MyClass->data);

   // alternatively
   interior_ptr<MyClass ^> p2 = &h_MyClass;
   (*p2)->data = 3;
   Console::WriteLine((*p2)->data);
}
1
2
3

Vedi anche

Estensioni componenti per .NET e UWP