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

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

Siehe auch

Komponentenerweiterungen für .NET und UWP