2009-07-14 12 views
5

Je me souviens d'avoir vu quelque part que l'opérateur "^" est utilisé comme un opérateur de pointeur dans le code C++ géré. Par conséquent "^" devrait être équivalent à "*" opérateur droite?comprehension Chaîne^en C++ .Net

Si l'on suppose ma compréhension est bonne, quand j'ai commencé à comprendre .Net et codifiés quelques exemples de programmes, je suis tombé sur un code comme ceci:

String ^username; //my understanding is you are creating a pointer to string obj 
. 
.   // there is no malloc or new that allocates memory to username pointer 
. 
username = "XYZ"; // shouldn't you be doing a malloc first??? isn't it null pointer 

J'ai du mal à comprendre cela.

Répondre

8

String^ est un pointeur sur le tas géré, également connu sous le nom handle. Les pointeurs et les poignées ne sont pas interchangeables.

L'appel new va allouer un objet sur un tas non géré et retourner un pointeur. D'autre part, l'appel gcnew allouera un objet sur un tas géré et retournera un handle.

La ligne username = "XYZ" est simplement un sucre de compilateur. Il est équivalent à

username = gcnew String(L"XYZ"); 
3

Il s'agit d'une référence, et non d'un pointeur, à une chaîne récupérée.

Elle sera allouée et désallouée automatiquement, lorsque plus rien ne la référencera.

2

Si vous considérez que ^ est similaire à shared_ptr vous serez pas loin de la vérité.