254 votes

Que veut dire le caret ('^') en C ++ / CLI?

Je viens de trouver ce code et quelques recherches Google ne fournissent aucune explication de cette mystérieuse syntaxe.

 Hashtable^ tempHash = gcnew Hashtable(iterators_);

IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();
 

Qu'est-ce que le caret veut dire? (Le gcnew est aussi nouveau pour moi, et j'ai posé une question à ce sujet ici .)

205voto

Rob Walker Points 25840

Ceci est C ++ / CLI et le caret est l'équivalent géré d'un * (pointeur) qui dans la terminologie C ++ / CLI est appelé un «handle» à un «type de référence» (puisque vous pouvez toujours avoir des pointeurs non gérés).

(Merci à Aardvark pour avoir souligné la meilleure terminologie.)

106voto

salomon Points 286
 // 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 pointeur % correspond à ^ lorsque le pointeur & correspond à * . En C ++, l'opérateur unaire & est en C ++ / CLI de l'opérateur unaire % .

Tandis que &ptr produit des rendements en P* , %mngd à MO^ .

26voto

Franci Penov Points 45358

Cela signifie qu'il s'agit d'une référence à un objet géré par rapport à un pointeur C ++ standard. Les objets derrière ces références sont gérés par le moteur d'exécution et peuvent être déplacés dans la mémoire. Ils sont également collectés automatiquement.

23voto

Joel Coehoorn Points 190579

Lorsque vous avez alloué de la mémoire gérée, cette dernière peut être déplacée par le ramasse-miettes. L'opérateur ^ est un pointeur pour la mémoire gérée, qui continue à pointer vers le bon emplacement même si le ramasse-miettes déplace l'objet vers lequel il pointe.

2voto

1800 INFORMATION Points 55907

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X