interior_ptr (C++/CLI)
Ein innerer Zeiger deklariert einen Zeiger in einen Verweistyp, aber nicht auf das Objekt selbst. Ein innerer Zeiger kann auf ein Verweishandle, einen Werttyp, das Handle eines Boxed-Typs, einen Member eines verwalteten Typs oder ein Element eines verwalteten Arrays zeigen.
Alle Laufzeiten
(Es gibt keine Hinweise für diese Sprachfunktion, die für alle Laufzeiten gültig sind.)
Windows-Runtime
(Es gibt keine Hinweise für diese Sprachfunktion, die nur für Windows-Runtime gelten.)
Anforderungen
Compileroption: /ZW
Übersicht: Common Language Runtime (CLR)
Im folgenden Syntaxbeispiel wird ein innerer Zeiger dargestellt.
Syntax
cli::interior_ptr<cv_qualifier type> var = &initializer;
Parameter
cv_qualifier
const
oder volatile
Qualifizierer.
type
Der Typ von initializer.
var
Der Name der interior_ptr-Variablen.
initializer
Ein Member eines Verweistyps, ein Element eines verwalteten Arrays oder jedes andere Objekt, das Sie einem nativen Zeiger zuweisen können.
Hinweise
Ein nativer Zeiger kann kein Element nachverfolgen, da sein Speicherort sich auf dem verwalteten Heap ändert, was dazu führt, dass der Garbage Collector Instanzen eines Objekts verschiebt. Damit ein Zeiger ordnungsgemäß auf die Instanz verweisen kann, muss die Runtime den Zeiger mit dem neu positionierten Objekt aktualisieren.
Ein interior_ptr repräsentiert eine Obermenge der Funktionalität eines nativen Zeigers. Daher kann alles, was einem nativen Zeiger zugewiesen werden kann, auch einem interior_ptr zugewiesen werden. Ein innerer Zeiger darf die gleichen Vorgänge ausführen wie native Zeiger, einschließlich Vergleichs- und Zeigerarithmetik.
Ein innerer Zeiger kann nur auf dem Stapel deklariert werden. Ein innerer Zeiger kann nicht als Member einer Klasse deklariert werden.
Da innere Zeiger nur auf dem Stapel vorhanden sind, ergibt das Übernehmen der Adresse eines inneren Zeigers einen nicht verwalteten Zeiger.
interior_ptr verfügt über eine implizite Konvertierung in bool
, die die Verwendung in bedingten Anweisungen ermöglicht.
Informationen dazu, wie ein innerer Zeiger deklariert wird, der in ein Objekt verweist, dass auf dem der Garbage Collection unterzogenen Heap nicht verschoben werden kann, finden Sie unter pin_ptr.
interior_ptr befindet sich im cli-Namespace. Weitere Informationen finden Sie unter Namespaces „Platform“, „default“ und „cli“.
Weitere Informationen zu inneren Zeigern finden Sie unter
Vorgehensweise: Deklarieren und Verwenden von inneren Zeigern und verwalteten Arrays (C++/CLI)
Vorgehensweise: Deklarieren von Werttypen mit dem interior_ptr-Schlüsselwort (C++/CLI)
Vorgehensweise: Überladen von Funktionen mit inneren und nativen Zeigern (C++/CLI)
Vorgehensweise: Deklarieren von inneren Zeigern mit dem const-Schlüsselwort (C++/CLI)
Anforderungen
Compileroption: /clr
Beispiele
Das folgende Beispiel zeigt, wie Sie einen inneren Zeiger in einen Verweistyp deklarieren und verwenden.
// 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