Partage via


interior_ptr (C++-CLI)

Un pointeur intérieur déclare un pointeur vers un type référence, mais pas vers l’objet lui-même. Un pointeur intérieur peut pointer vers un descripteur de référence, un descripteur de type valeur ou boxed, un membre d’un type managé ou un élément d’un groupe managé.

Tous les runtimes

(Aucune remarque pour cette fonctionnalité de langage ne s’applique à tous les runtimes.)

Windows Runtime

(Aucune note de cette fonctionnalité de langage ne s’applique qu’au Windows Runtime.)

Spécifications

Option du compilateur : /ZW

Common Language Runtime

L’exemple de syntaxe suivant montre un pointeur intérieur.

Syntaxe

cli::interior_ptr<cv_qualifier type> var = &initializer;

Paramètres

cv_qualifier
const ou volatile qualificateurs.

type
Type d’initialiseur.

var
Nom de la variable interior_ptr.

initializer
Membre d’un type référence, d’un élément ou d’un groupe managé, ou de tout autre type d’objet qu’il est possible d’assigner à un pointeur natif.

Notes

Un pointeur natif n’est pas en mesure d’effectuer le suivi d’un élément étant donné que son emplacement change dans le tas managé, ce qui entraîne le déplacement des instances d’un objet par le récupérateur de mémoire. Pour qu’un pointeur fasse correctement référence à l’instance, le runtime doit mettre à jour le pointeur sur l’objet qui vient d’être positionné.

Un interior_ptr représente un surensemble de la fonctionnalité d’un pointeur natif. Par conséquent, tout ce qui peut être assigné à un pointeur natif peut aussi être assigné à un interior_ptr. Un pointeur intérieur est autorisé à effectuer le même ensemble d’opérations que des pointeurs natifs, y compris la comparaison et l’arithmétique de pointeur.

Un pointeur intérieur peut uniquement être déclaré sur la pile. Un pointeur intérieur ne peut pas être déclaré en tant que membre d’une classe.

Dans la mesure où il existe des pointeurs intérieurs uniquement sur la pile, prendre l’adresse d’un pointeur intérieur génère un pointeur non managé.

interior_ptr a une conversion implicite en bool, ce qui permet son utilisation dans les instructions conditionnelles.

Pour plus d’informations sur la façon de déclarer un pointeur intérieur qui pointe vers un objet qui ne peut pas être déplacé sur le tas récupéré par le récupérateur de mémoire, consultez pin_ptr.

interior_ptr est dans l’espace de noms CLI. Consultez Plateforme, valeurs par défaut et espaces de noms CLI pour plus d’informations.

Pour plus d’informations sur les pointeurs intérieurs, consultez

Spécifications

Option du compilateur : /clr

Exemples

L’exemple suivant montre comment déclarer et utiliser un pointeur intérieur dans un type référence.

// interior_ptr.cpp
// compile with: /clr
using namespace System;

ref class MyClass {
public:
   int data;
};

int main() {
   MyClass ^ h_MyClass = gcnew MyClass;
   h_MyClass->data = 1;
   Console::WriteLine(h_MyClass->data);

   interior_ptr<int> p = &(h_MyClass->data);
   *p = 2;
   Console::WriteLine(h_MyClass->data);

   // alternatively
   interior_ptr<MyClass ^> p2 = &h_MyClass;
   (*p2)->data = 3;
   Console::WriteLine((*p2)->data);
}
1
2
3

Voir aussi

Extensions de composants pour .NET et UWP