Partager via


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 Vvaleur, 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

interior_ptr (C++-CLI)