interior_ptr (C++/CLI)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.An interior pointer declares a pointer to inside a reference type, but not to the object itself. 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é.An interior pointer can point to a reference handle, value type, boxed type handle, member of a managed type, or to an element of a managed array.

Tous les runtimesAll Runtimes

(Aucune remarque pour cette fonctionnalité de langage ne s’applique à tous les runtimes.)(There are no remarks for this language feature that apply to all runtimes.)

Windows RuntimeWindows Runtime

(Aucune note de cette fonctionnalité de langage ne s’applique qu’au Windows Runtime.)(There are no remarks for this language feature that apply to only the Windows Runtime.)

SpécificationsRequirements

Option du compilateur : /ZWCompiler option: /ZW

Common Language RuntimeCommon Language Runtime

L’exemple de syntaxe suivant montre un pointeur intérieur.The following syntax example demonstrates an interior pointer.

SyntaxeSyntax

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

ParamètresParameters

cv_qualifiercv_qualifier
const****volatile qualificateurs ou.const or volatile qualifiers.

typetype
Type d’initialiseur.The type of initializer.

varvar
Nom de la variable interior_ptr.The name of the interior_ptr variable.

initializerinitializer
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.A member of a reference type, element of a managed array, or any other object that you can assign to a native pointer.

NotesRemarks

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.A native pointer is not able to track an item as its location changes on the managed heap, which results from the garbage collector moving instances of an object. 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é.In order for a pointer to correctly refer to the instance, the runtime needs to update the pointer to the newly positioned object.

Un interior_ptr représente un surensemble de la fonctionnalité d’un pointeur natif.An interior_ptr represents a superset of the functionality of a native pointer. Par conséquent, tout ce qui peut être assigné à un pointeur natif peut aussi être assigné à un interior_ptr.Therefore, anything that can be assigned to a native pointer can also be assigned to an 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.An interior pointer is permitted to perform the same set of operations as native pointers, including comparison and pointer arithmetic.

Un pointeur intérieur peut uniquement être déclaré sur la pile.An interior pointer can only be declared on the stack. Un pointeur intérieur ne peut pas être déclaré en tant que membre d’une classe.An interior pointer cannot be declared as a member of a class.

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é.Since interior pointers exist only on the stack, taking the address of an interior pointer yields an unmanaged pointer.

interior_ptr a une conversion implicite en bool , ce qui permet son utilisation dans des instructions conditionnelles.interior_ptr has an implicit conversion to bool, which allows for its use in conditional statements.

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.For information on how to declare an interior pointer that points into an object that cannot be moved on the garbage-collected heap, see pin_ptr.

interior_ptr est dans l’espace de noms CLI.interior_ptr is in the cli namespace. Consultez Plateforme, valeur par défaut et espaces de noms cli pour plus d’informations.See Platform, default, and cli Namespaces for more information.

Pour plus d’informations sur les pointeurs intérieurs, consultezFor more information on interior pointers, see

SpécificationsRequirements

Option du compilateur : /clrCompiler option: /clr

ExemplesExamples

L’exemple suivant montre comment déclarer et utiliser un pointeur intérieur dans un type référence.The following sample shows how to declare and use an interior pointer into a reference type.

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

Extensions de composant pour .NET et UWPComponent Extensions for .NET and UWP