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 . .)

Était-ce utile?

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.

https://web.archive.org/web/20150117095313/http://msdn.microsoft.com/en-us/library/te3ecsc8%28VS.80%29.aspx

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:

http://en.wikipedia.org/wiki/C%2B % 2B / CLI

Cela signifie qu'il s'agit d'une référence à un objet géré.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top