Comment : déclarer des types de valeur avec le mot clé interior_ptr (C++/CLI)
Un interior_ptr peut être utilisé avec un type valeur.
Important
Cette fonctionnalité de langage est prise en charge par l’option du compilateur /clr
, mais pas par l’option du compilateur /ZW
.
Exemple : interior_ptr avec le type valeur
Description
L’exemple C++/CLI suivant montre comment utiliser un interior_ptr avec un type 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);
}
1
2
2
3
3
3
Exemple : this
pointeur
Description
Dans un type valeur, le this
pointeur prend la valeur d’un interior_ptr.
Dans le corps d’une fonction membre non statique d’un type V
valeur, this
est une expression de type interior_ptr<V>
dont la valeur est 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 : opérateur address-of
Description
L’exemple suivant montre comment utiliser l’opérateur address-of avec des membres statiques.
L’adresse d’un membre de type Visual C++ statique génère un pointeur natif. L’adresse d’un membre de type valeur statique est un pointeur managé, car le membre de type valeur est alloué sur le tas du runtime et peut être déplacé par le récupérateur de mémoire.
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
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour