Partager via


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

Voir aussi

Référence

interior_ptr