Partager via


interior_ptr

Un pointeur intérieur déclare un pointeur à l'intérieur d'un type de référence, mais pas à l'objet lui-même. Un pointeur intérieur peut pointer vers un handle de référence, un type de valeur, un handle enfermé dans une boîte de type, un membre d'un type managé, ou un élément d'un tableau managé.

Tous les runtimes

(Aucune note de 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.)

Conditions requises

Option du compilateur : /ZW

Common Language Runtime

L'exemple de syntaxe montre un pointeur intérieur.

Syntaxe

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

Paramètres

  • cv_qualifier
    const ou identificateurs volatile.

  • type
    Type de initializer.

  • var
    Nom de la variable interior_ptr.

  • initializer
    Un membre d'un type de référence, un élément d'un tableau managé, ou tout autre objet que vous pouvez attribuer à un pointeur natif.

Remarques

Un pointeur natif ne peut pas suivre un élément lorsque son emplacement change sur le segment managé, ce qui résulte en des instances de déplacement de garbage collector d'un objet. Pour qu'un pointeur fasse référence correctement à l'instance, l'exécution doit mettre à jour le pointeur à l'objet récemment positionné.

Un interior_ptr représente un surensemble des fonctionnalités d'un pointeur natif. Par conséquent, un problème susceptible d'être affecté à un pointeur natif peut également être affecté à interior_ptr. Un pointeur intérieur est autorisé à exécuter le même ensemble d'opérations que les pointeurs natifs, notamment la comparaison et retourner les opérations arithmétiques sur les pointeurs.

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

Puisque les pointeurs intérieurs existent uniquement dans la pile, prendre l'adresse d'un pointeur intérieur donne cell d'un pointeur non-managé.

interior_ptr une conversion implicite à bool, 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 segment récupérés par le garbage collector, consultez pin_ptr.

interior_ptr est dans l'espace de noms cli. Pour plus d'informations, consultez l'espace de noms de CLI.

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

Conditions requises

Option du compilateur : /clr

Exemples

Exemple

L'exemple suivant indique comment déclarer et utiliser un pointeur dans dans un type de 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);
}

Sortie

123

Voir aussi

Concepts

Fonctionnalités de langage pour cibler le CLR