En C ++ / CLI, ¿qué hace el personaje de sombrero?

Estaba leyendo Ivor Horton’s Beginning Visual C ++ 2008 y muchos de sus ejemplos CLR tienen esta definición para main:

int main(array ^args) 

Volví, página por página, al principio del libro para encontrar la primera instancia con una explicación de lo que realmente significa, pero no pude encontrar ninguna.

Obviamente, significa lo mismo que el estándar int main(int argc, char *argv[]) , pero me gustaría saber cuándo y por qué ^ realmente se usa, y por qué existe (¿hace algo que apunta? * y referencias & no pueden representar)?

Es un puntero administrado, mientras que * marca un puntero a un objeto que no está administrado, ^ apunta a un objeto recolectado basura (manejado por el marco). Lea esto para obtener más información sobre cómo se manejan los punteros en .NET.

Solo para agregar a eso, en C ++ / CLI, los punteros administrados se manejan por separado de los punteros normales, por lo que incluso los asigna con una palabra clave diferente:

 NativeObject* n = new NativeObject(); ManagedObject^ m = gcnew ManagedObject(); 

Los objetos administrados y nativos son dos cosas completamente diferentes y no se pueden mezclar (bueno, no fácilmente).

Vea esto para una discusión completa: http://msdn.microsoft.com/de-de/library/yk97tc08.aspx :

Un identificador de un objeto en el montón administrado apunta al objeto “entero” y no a un miembro del objeto.