c++-cli

c++ cli - ¿Qué significa la declaración de C++/CLI Object ^%(signo de porcentaje de caret)?



c++-cli (5)

Esencialmente, es la versión "administrada" de Object*& , y equivalente a ref o out en un tipo de referencia en C #.

Aparentemente, este es un término a prueba de Google ya que no puedo hacer que ningún motor de búsqueda elimine los caracteres "extra". También busqué en MSDN en la referencia de C ++ pero parece que no puedo encontrar la referencia de C ++ / CLI porque no hay nada en la sección de declaraciones.



Este es un puntero gestionado por referencia. Así que si tuvieras algo como:

void DoSomething(System::String^% stringObject)

en C # se vería como:

void DoSomething(ref System.String stringObject)


Significa "pasar por referencia":

void bar::foo(Object^% arg) { arg = gcnew Object; // Callers argument gets updated }

Lo mismo en C ++:

void foo(Object** arg) { *arg = new Object; }

o C #:

void foo(out object arg) { arg = new Object(); }

C ++ / CLI no distingue entre referencia y salida , no tiene la función de comprobación de asignación definida que el lenguaje C # no tiene por qué distinguir entre las dos. Lo mismo en VB.NET, ByRef vs ByVal.


% es una msdn.microsoft.com/en-us/library/8903062a%28VS.80%29.aspx .

Es similar a una referencia nativa ( Object& ), pero una referencia de seguimiento puede hacer referencia a un objeto CLR mientras que una referencia nativa no puede. La distinción es necesaria porque el recolector de basura puede mover objetos CLR, por lo que la dirección de memoria de un objeto CLR puede cambiar.

El ^ simplemente significa que se gestiona. Ver MSDN y también esta publicación SO .