interior_ptr (C++/CLI)

 

Veröffentlicht: Juli 2016

Die neueste Dokumentation zu Visual Studio 2017 finden Sie unter Dokumentation zu Visual Studio 2017.

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.

(Es gibt keine Hinweise für diese Sprachfunktion, die für alle Laufzeiten gültig sind.)

(Es gibt keine Hinweise für diese Sprachfunktion, die nur für Windows-Runtime gelten.)

Voraussetzungen

Compileroption: /ZW

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, and cli Namespaces.

Weitere Informationen zum inneren Zeiger, finden Sie unter

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

1
2
3

Component Extensions for Runtime Platforms

Anzeigen: