visual cli .net c++-cli

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



c++-cli (7)

Acabo de encontrar este código y algunas búsquedas de Google no dan ninguna explicación de esta sintaxis 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 here ).


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.



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

C++/CLI


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

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


Significa que es una referencia a un objeto administrado.


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.


// 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^ .