interior_ptr (C++/CLI)
Ein innerer Zeiger deklarieren einen Zeiger in einen Verweistyp, jedoch nicht auf das Objekt selbst. Ein innerer Zeiger kann auf einem Bezugshandle, Werttyp, eingepacktes Typhandle, Member eines verwalteten Typs oder ein Element eines verwalteten Arrays wird.
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.)
Voraussetzungen
Compileroption: /ZW
Common Language Runtime
Im folgenden Syntaxbeispiel zeigt einen inneren Zeiger.
Syntax
cli::interior_ptr<cv_qualifier type> var = &initializer;
Parameter
cv_qualifier
const oder Qualifizierer volatile.type
Der initializer-Typ.var
Der Name der Variablen interior_ptr.initializer
Ein Member eines Referenztyps, des Elements eines verwalteten Arrays oder einem anderen Objekt, das auf einem systemeigenen Zeiger zuweisen können.
Hinweise
Ein systemeigener Zeiger ist nicht in der Lage, ein Element zu verfolgen, da sein Speicherort auf dem verwalteten Heap ändern, der von den verschobenen Instanzen des Garbage Collectors eines Objekts entsteht. Damit ein Zeiger ordnungsgemäß die Instanz, die Common Language Runtime muss den Zeiger auf das neu positionierbare Objekt aktualisieren verweist.
interior_ptr stellt eine Obermenge der Funktionalität eines systemeigenen Zeiger dar. Daher alles kann, das auf einem systemeigenen Zeiger zugewiesen werden kann, auch zugewiesen sind interior_ptr. Ein innerer Zeiger ist zulässig, um den gleichen Satz von Vorgängen wie systemeigene Zeiger, einschließlich den Vergleich und Zeigerarithmetik auszuführen.
Ein innerer Zeiger kann auf dem Stapel nur deklariert werden. Ein innerer Zeiger kann nicht als Member einer Klasse deklariert werden.
Da innere Zeiger nur vom Stapel vorhanden und nehmen die Adresse von Erträgen eines inneren Zeigers einen nicht verwalteten Zeiger.
interior_ptr enthält eine implizite Konvertierung in bool, die dessen Verwendung in Bedingungsanweisungen zulässt.
Informationen dazu, wie Sie einen inneren Zeiger, der auf ein Objekt verweist, das nicht auf dem Heap der Garbage Collection verschoben werden kann, finden Sie unter pin_ptr deklariert.
interior_ptr befindet sich im cli-Namespace. Weitere Informationen finden Sie unter Platform-, default- und cli-Namespaces (Komponentenerweiterungen für C++).
Weitere Informationen zum inneren Zeiger, finden Sie unter
Gewusst wie: Deklarieren und Verwenden von inneren Zeigern und verwalteten Arrays (C++/CLI)
Gewusst wie: Deklarieren von Werttypen mit dem interior_ptr-Schlüsselwort (C++/CLI)
Gewusst wie: Überladen von Funktionen mit inneren und systemeigenen Zeigern (C++/CLI)
Gewusst wie: Deklarieren von inneren Zeigern mit dem const-Schlüsselwort (C++/CLI)
Voraussetzungen
Compileroption: /clr
Beispiele
Beispiel
Das folgende Beispiel zeigt, wie ein innerer Zeiger in einen Verweistyp deklariert und verwendet.
// 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);
}
Ausgabe
123