Comment : déclarez les types valeur avec le mot clé d'interior_ptr
Un interior_ptr peut être utilisé avec un type de valeur.
Important
Cette fonctionnalité des langues est prise en charge par l'option du compilateur /clr, mais pas par l'option du compilateur /ZW.
Exemple
Description
L'exemple suivant C++/CLI montre comment utiliser interior_ptr avec un type de valeur.
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);
}
Sortie
1
2
2
3
3
3
Exemple
Description
Dans un type de valeur, le pointeur this correspond à un interior_ptr.
Le corps d'une fonction membre statique d'un type de valeur V, this est une expression de type interior_ptr<V> dont la valeur correspond à l'adresse de l'objet pour lequel la fonction est appelée.
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
}
};
Exemple
Description
L'exemple suivant montre comment utiliser l'opérateur d'adresse à des membres statiques.
L'adresse d'un membre de type Visual C++ statiques génère un pointeur natif. L'adresse d'un membre statique de type de valeur pointeur managé car le membre de type valeur est alloué sur le segment d'exécution et peut être déplacé par le garbage collector.
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);
}
Sortie
22
23
hello