Share via


interior_ptr (C++/CLI)

Un puntatore interno dichiara un puntatore in un tipo di riferimento, ma non all'oggetto stesso. Un puntatore interno può puntare ad un handle di riferimento, ad un tipo di valore, ad un handle di tipo boxed, ad un membro di un tipo gestito o ad un elemento di un array gestito.

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

L'esempio di sintassi seguente illustra un puntatore interno.

Sintassi

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

Parametri

  • cv_qualifier
    const o qualificatori di volatile.

  • type
    Tipo di initializer.

  • var
    Il nome della variabile interior_ptr.

  • initializer
    Un membro di un tipo di riferimento, di un elemento di un array gestito o di un qualsiasi altro oggetto che è possibile assegnare ad un puntatore nativo.

Osservazioni

Un puntatore nativo non può tracciare un elemento se la sua posizione cambia nell'heap gestito, il quale deriva da istanze di spostamento del Garbage Collector di un oggetto. Affinché un puntatore faccia riferimento correttamente all'istanza, il runtime deve aggiornare il puntatore all'oggetto appena posizionato.

Un interior_ptr rappresenta un superset della funzionalità di un puntatore nativo. Pertanto, qualsiasi cosa che possa essere assegnata ad un puntatore nativo può anche essere assegnata ad un interior_ptr. Un puntatore interno può eseguire lo stesso gruppo di operazioni dei puntatori nativi, incluso il confronto e l'aritmetica dei puntatori.

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

Poiché i puntatori interni sono disponibili solo nello stack, prendere l'indirizzo di un puntatore interno genera un puntatore non gestito.

interior_ptr ha una conversione implicita a bool, che consente di utilizzarlo nelle istruzioni condizionali.

Per informazioni su come dichiarare un puntatore interno che punta in un oggetto che non può essere spostato sull'heap del garbage collection, vedere pin_ptr.

interior_ptr è nello spazio dei nomi cli. Per ulteriori informazioni, vedere Spazi dei nomi Platform, default e cli (Estensioni del componente C++).

Per ulteriori informazioni sui puntatori interni, vedere

Requisiti

Opzione del compilatore: /clr

Esempi

Esempio

Il seguente codice di esempio mostra 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);
}

Output

123

Vedere anche

Concetti

Estensioni componenti per le piattaforme runtime