Gewusst wie: Deklarieren von Werttypen mit dem interior_ptr-Schlüsselwort (C++/CLI)
Ein interior_ptr kann mit einem Werttyp verwendet werden.
Wichtig
Dieses Sprachfeature wird durch die Compileroption /clr
unterstützt, nicht jedoch durch die Compileroption /ZW
.
Beispiel: interior_ptr mit Werttyp
Beschreibung
Das folgende C++/CLI-Beispiel veranschaulicht, wie ein interior_ptr mit einem Werttyp verwendet werden kann.
Code
// interior_ptr_value_types.cpp
// compile with: /clr
value struct V {
V(int i) : data(i){}
int data;
};
int main() {
V v(1);
System::Console::WriteLine(v.data);
// pointing to a value type
interior_ptr<V> pv = &v;
pv->data = 2;
System::Console::WriteLine(v.data);
System::Console::WriteLine(pv->data);
// pointing into a value type
interior_ptr<int> pi = &v.data;
*pi = 3;
System::Console::WriteLine(*pi);
System::Console::WriteLine(v.data);
System::Console::WriteLine(pv->data);
}
1
2
2
3
3
3
Beispiel: this
Zeiger
Beschreibung
In einem Werttyp wertet der this
Zeiger eine interior_ptr aus.
Im Textkörper einer nicht statischen Memberfunktion eines Werttyps ist ein Ausdruck des Typs V
this
interior_ptr<V>
, dessen Wert die Adresse des Objekts ist, für das die Funktion aufgerufen wird.
Code
// interior_ptr_value_types_this.cpp
// compile with: /clr /LD
value struct V {
int data;
void f() {
interior_ptr<V> pv1 = this;
// V* pv2 = this; error
}
};
Beispiel: Adresse des Operators
Beschreibung
Das folgende Beispiel zeigt, wie Sie den address-of-Operator mit statischen Membern verwenden.
Die Adresse eines statischen Visual C++-Typmembers ergibt einen nativen Zeiger. Die Adresse eines statischen Werttypmembers ist ein verwalteter Zeiger, da ein Werttypmember auf dem Runtime-Heap zugeordnet wird und vom Garbage Collector verschoben werden kann.
Code
// interior_ptr_value_static.cpp
// compile with: /clr
using namespace System;
value struct V { int i; };
ref struct G {
static V v = {22};
static int i = 23;
static String^ pS = "hello";
};
int main() {
interior_ptr<int> p1 = &G::v.i;
Console::WriteLine(*p1);
interior_ptr<int> p2 = &G::i;
Console::WriteLine(*p2);
interior_ptr<String^> p3 = &G::pS;
Console::WriteLine(*p3);
}
22
23
hello
Siehe auch
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für