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

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

Hashtable^ tempHash = gcnew Hashtable(iterators_); IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator(); 

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

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 ‘manejar’ a ‘tipo de referencia’ (ya que aún puede tener punteros no administrados).

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

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

Mientras que &ptr produce un P* , %mngd cede en MO^ .

Significa que se trata de una referencia a un objeto gestionado frente a un puntero normal de C ++. Los objetos detrás de tales referencias son gestionados por el tiempo de ejecución y pueden ser reubicados en la memoria. También se recogen basura automáticamente.

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

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

http://msdn.microsoft.com/en-us/library/te3ecsc8(VS.80).aspx

Significa que es una referencia a un objeto administrado.

En C ++ / CLI significa un puntero administrado. Puede leer más sobre esto (y otras características de C ++ / CLI) aquí:

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