Gewusst wie: Deklarieren von Werttypen mit dem interior_ptr-Schlüsselwort (C++/CLI)
interior_ptr kann mit einem Werttyp verwendet werden.
Wichtig |
---|
Diese Sprachfunktion wird von der /clr - Compileroption, aber nicht von der /ZW Compileroption unterstützt. |
Beispiel
Beschreibung
Im Folgenden C++/CLI Beispiel wird gezeigt, wie interior_ptr mit einem Werttyp verwendet.
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);
}
Output
1
2
2
3
3
3
Beispiel
Beschreibung
In einem Werttyp wertet der this Zeiger auf ein interior_ptr aus.
Im Text einer nicht statischen Memberfunktion eines Werttyps V, ist this ein Ausdruck vom Typ interior_ptr<V> , dessen Wert die Adresse des Objekts, 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
Beschreibung
Das folgende Beispiel zeigt, wie Sie den Adressoperator mit statischen Member verwendet.
Die Adresse eines statischen Visual C++-Typmembers führt zu einem systemeigenen Zeiger.Die Adresse eines statischen Werttyp members ist ein Werttyp, da verwalteter Zeiger auf den Member heap Laufzeit zugeordnet ist 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);
}
Output
22
23
hello