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
Guide pratique pour déclarer et utiliser des pointeurs intérieurs et des tableaux managés (C++-CLI)
Guide pratique pour déclarer des types de valeur avec le mot clé interior_ptr (C++-CLI)
Guide pratique pour déclarer des pointeurs intérieurs avec le mot clé const (C++-CLI)
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