¿Qué significa el símbolo de intercalación ('^') en C ++ / CLI?


212

Acabo de encontrar este código y algunas búsquedas en Google no muestran ninguna explicación de esta misteriosa (para mí) sintaxis.

Hashtable^ tempHash = gcnew Hashtable(iterators_);

IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();

¿Qué diablos significa el caret? (El gcnewtambién es nuevo para mí, y pregunté sobre eso aquí ).


66
Por cierto, se pronuncia "sombrero" .
kmote

Respuestas:


176

Esto es C ++ / CLI y el símbolo de intercalación es el equivalente administrado de un * (puntero) que en la terminología de C ++ / CLI se denomina 'identificador' a un 'tipo de referencia' (ya que aún puede tener punteros no administrados).

(Gracias a Aardvark por señalar la mejor terminología).


55
¿La sintaxis (supongo "referencia no administrada") "y" todavía existe en C ++ / CLI?
Owen

C ++ / CLI es una extensión de C ++ normal, por lo que sí, solo es para referencias no administradas
1800 INFORMACIÓN

77
// 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 general, el Punctuator %es ^como el Punctuator &es *. En C ++, el &operador unario está en C ++ / CLI, el %operador unario .

Mientras &ptrproduce a P*, %mngdrinde en MO^.


1
Prefiero decir por qué no ^ mngd en lugar de * mngd .. Es confuso de repente usar el símbolo de puntero no administrado (*), no el puntero administrado (^) frente a la variable realmente declarada en el montón administrado.
swcraft

20

Significa que esta es una referencia a un objeto administrado frente a un puntero C ++ normal. Los objetos detrás de tales referencias son administrados por el tiempo de ejecución y se pueden reubicar en la memoria. También se recolectan basura automáticamente.


17

Cuando asigna memoria administrada, el recolector de basura puede mover esa memoria. El operador ^ es un puntero para la memoria administrada, que continúa apuntando al lugar correcto incluso si el recolector de basura mueve el objeto al que apunta.


4

Desde MSDN, parece que el símbolo de intercalación significa que está obteniendo un control del tipo que se está creando.

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


enlace muerto (2018)
gbarry

Se corrigió el enlace a la copia archive.org. Honestamente, los enlaces de MSDN son tan frágiles que todos los nuevos enlaces de MSDN deberían ejecutarse a través de archive.org desde el principio.
Anssssss


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.