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
Procedura: Dichiarare e usare i puntatori interni e le matrici gestite (C++/CLI)
Procedura: Dichiarare i tipi di valori con la parola chiave interior_ptr (C++/CLI)
Procedura: Eseguire l'overload di funzioni con puntatori interni e puntatori nativi (C++/CLI)
Procedura: Dichiarare i puntatori interni con la parola chiave const (C++/CLI)
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