Que signifie le curseur ("^") en C ++ / CLI?
Question
Je viens de découvrir ce code et quelques recherches sur Google ne fournissent aucune explication de cette syntaxe mystérieuse (pour moi).
Hashtable^ tempHash = gcnew Hashtable(iterators_);
IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();
Que diable signifie le gardien? (Le gcnew
est également nouveau pour moi, et j'ai posé des questions à ce sujet à ce ici . .)
La solution
Il s'agit de C ++ / CLI et le caret est géré équivalent d'un * (pointeur) qui, dans la terminologie C ++ / CLI, est appelé " handle " dans un" type de référence "(vous pouvez toujours avoir des pointeurs non gérés).
(Merci à Aardvark d'avoir signalé la meilleure terminologie.)
Autres conseils
// here normal pointer
P* ptr = new P; // usual pointer allocated on heap
P& nat = *ptr; // object on heap bind to native object
//.. here CLI managed
MO^ mngd = gcnew MO; // allocate on CLI heap
MO% rr = *mngd; // object on CLI heap reference to gc-lvalue
En général, le ponctuateur %
est destiné à ^
comme le ponctuateur & amp;
est constitué de *
. En C ++, l’opérateur unaire & amp;
est dans C ++ / CLI l’opérateur unaire %
.
Alors que & amp; ptr
donne un P *
, % mngd
donne un MO ^
.
Cela signifie qu'il s'agit d'une référence à un objet géré par rapport à un pointeur C ++ standard. Les objets situés derrière ces références sont gérés par le moteur d'exécution et peuvent être déplacés en mémoire. Ils sont également collectés automatiquement.
Lorsque vous allouez de la mémoire gérée, cette mémoire peut être déplacée par le ramasse-miettes. L'opérateur ^ est un pointeur pour la mémoire gérée, qui continue de pointer vers l'emplacement correct même si le garbage collector déplace l'objet vers lequel il pointe.
D'après MSDN, il semble que le curseur d'insertion signifie que vous obtenez un descripteur du type en cours de création.
En C ++ / CLI, cela signifie un pointeur géré. Vous pouvez en savoir plus à ce sujet (et sur d’autres fonctionnalités C ++ / CLI) ici:
Cela signifie qu'il s'agit d'une référence à un objet géré.