.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.
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
En C ++ / CLI significa un puntero administrado. Puede leer más sobre esto (y otras características de C ++ / CLI) 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 ''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^
.