Partager via


Comment : déclarer des types de valeur avec le mot clé interior_ptr (C++/CLI)

interior_ptr peut être utilisé avec un type valeur.

Important

Cette fonctionnalité de langage est prise en charge par l'option du compilateur pour /clr , mais pas par l'option du compilateur pour /ZW .

Exemple

t19s4hxx.collapse_all(fr-fr,VS.110).gifDescription

L'exemple de C++/CLI montre comment utiliser interior_ptr avec un type valeur.

t19s4hxx.collapse_all(fr-fr,VS.110).gifCode

// 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);
}

t19s4hxx.collapse_all(fr-fr,VS.110).gifSortie

1
2
2
3
3
3

Exemple

t19s4hxx.collapse_all(fr-fr,VS.110).gifDescription

Dans un type valeur, le pointeur d' this correspond à un interior_ptr.

Dans le corps d'une fonction membre non statique d'un type valeur V, this est une expression du type interior_ptr<V> dont la valeur est l'adresse de l'objet pour lequel la fonction est appelée.

t19s4hxx.collapse_all(fr-fr,VS.110).gifCode

// 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

t19s4hxx.collapse_all(fr-fr,VS.110).gifDescription

L'exemple suivant montre comment utiliser l'opérateur address-of avec des membres statiques.

L'adresse d'un membre de type Visual C++ de statique génère un pointeur natif.L'adresse d'un membre statique de type valeur est un pointeur managé car le membre de type valeur est alloué sur le tas runtime et peut être déplacé par le garbage collector.

t19s4hxx.collapse_all(fr-fr,VS.110).gifCode

// 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);
}

t19s4hxx.collapse_all(fr-fr,VS.110).gifSortie

22
23
hello

Voir aussi

Référence

interior_ptr (C++/CLI)