Comment : déclarer des types de valeur avec le mot clé interior_ptr (C++/CLI)How to: Declare Value Types with the interior_ptr Keyword (C++/CLI)

Un interior_ptr peut être utilisé avec un type valeur.An interior_ptr can be used with a value type.

Important

Cette fonctionnalité de langage est prise en charge par l’option du compilateur /clr, mais pas par l’option du compilateur /ZW.This language feature is supported by the /clr compiler option, but not by the /ZW compiler option.

Exemple : interior_ptr avec le type valeurExample: interior_ptr with value type

DescriptionDescription

L’exemple C++/CLI suivant montre comment utiliser un interior_ptr avec un type valeur.The following C++/CLI sample shows how to use an interior_ptr with a value type.

CodeCode

// 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 : ce pointeurExample: this pointer

DescriptionDescription

Dans un type valeur, le this pointeur prend la valeur d’une interior_ptr.In a value type, the this pointer evaluates to an interior_ptr.

Dans le corps d’une fonction membre non statique d’un type valeur V , this est une expression de type dont la interior_ptr<V> valeur est l’adresse de l’objet pour lequel la fonction est appelée.In the body of a non-static member-function of a value type V, this is an expression of type interior_ptr<V> whose value is the address of the object for which the function is called.

CodeCode

// 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 d’adresseExample: address-of operator

DescriptionDescription

L’exemple suivant montre comment utiliser l’opérateur address-of avec des membres statiques.The following sample shows how to use the address-of operator with static members.

L’adresse d’un membre de type Visual C++ statique génère un pointeur natif.The address of a static Visual C++ type member yields a native pointer. 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.The address of a static value type member is a managed pointer because value type member is allocated on the runtime heap and can be moved by the garbage collector.

CodeCode

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

interior_ptr (C++/CLI)interior_ptr (C++/CLI)