Pregunta

Me han dicho que un mango es una especie de puntero, pero no, y que le permite mantener una referencia a un objeto, más que el propio objeto. ¿Qué es una explicación más elaborada?

¿Fue útil?

Solución

Un mango puede ser cualquier cosa de un índice entero a un puntero a un recurso en el espacio del núcleo. La idea es que proporcionan una abstracción de un recurso, por lo que no necesitan saber mucho sobre el propio recurso usarlo.

Por ejemplo, el HWND en la API de Win32 es un asa para una ventana. Por sí mismo es inútil: no se puede deducir ninguna información de ella. Pero pasarlo a las funciones de la API adecuadas, y se puede llevar a cabo una gran cantidad de diferentes trucos con ella. Internamente se puede pensar en el HWND sólo como un índice en la tabla de las ventanas de la interfaz gráfica de usuario (que puede no ser necesariamente la forma en que está implementado, pero hace que el sentido de hacer magia).

EDIT: No es 100% seguro de lo que estabas preguntando específicamente en su pregunta. Esto está hablando principalmente acerca de pura C / C ++.

Otros consejos

Un mango es un puntero o índice con ningún tipo visible unido a él. Por lo general se ve algo como:

 typedef void* HANDLE;
 HANDLE myHandleToSomething = CreateSomething();

Así que en su código que acaba de pasar alrededor de MANGO como un valor opaco.

En el código que utiliza el objeto, se proyecta el puntero a un tipo de estructura real y lo utiliza:

 int doSomething(HANDLE s, int a, int b) {
     Something* something = reinterpret_cast<Something*>(s);
     return something->doit(a, b);
 }

O se lo utiliza como un índice para una matriz / vector:

 int doSomething(HANDLE s, int a, int b) {
     int index = (int)s;
     try {
         Something& something = vecSomething[index];
         return something.doit(a, b);
     } catch (boundscheck& e) {
         throw SomethingException(INVALID_HANDLE);
     }
 }

Un mango es una especie de puntero en la que es normalmente una forma de hacer referencia a alguna entidad.

Sería más exacto decir que un puntero es un tipo de mango, pero no todos los mangos son punteros.

Por ejemplo, un mango puede también ser algún índice en una tabla de memoria en, que corresponde a una entrada que contiene en sí mismo un puntero a un objeto.

La clave es que cuando se tiene un "mango", que ni saben ni cómo cuidar de que manejan realmente termina identificando lo que se identifica, todo lo que necesita saber es que lo hace.

También debería ser evidente que no hay una única respuesta a "¿qué es exactamente un mango", porque las manijas a diferentes cosas, incluso en el mismo sistema, pueden implementarse de diferentes maneras "bajo el capó". Pero que no es necesario que preocuparse de esas diferencias.

En C ++ / CLI, un mango es un puntero a un objeto situado en el montón GC. Creación de un objeto en el montón (no administrada) C ++ se consigue utilizando new y el resultado de una expresión new es un puntero "normal". Un objeto gestionado se asigna en el GC (gestionado) montón con una expresión gcnew. El resultado será un mango. No se puede hacer la aritmética de punteros en los mangos. Lo haces mangos no libres. El GC se hará cargo de ellos. Además, la GC es libre de trasladar objetos en el montón administrado y actualizar los controladores para apuntar a las nuevas ubicaciones mientras se ejecuta el programa.

Esto aparece en el contexto de la Handle-Cuerpo-Idiom , también llamado Pimpl idioma. Le permite a uno para mantener el ABI (interfaz binaria) de una biblioteca de la misma, manteniendo datos reales en otro objeto de clase, que es meramente referenciado por un puntero que tuvo lugar en un objeto "manejar", que consiste de las funciones que el delegado a esa clase " Cuerpo".

Es también útil para permitir la constante de tiempo y excepción de intercambio seguro de los dos objetos. Para ello, simplemente el puntero que apunta al objeto cuerpo tiene que ser cambiado.

Un mango es lo que quiere que sea.

Un mango puede ser un entero sin signo utilizado en algunos tabla de búsqueda.

A mango puede ser un puntero a, o en, un conjunto mayor de datos.

Depende de cómo el código que utiliza el mango comporta. Que determina el tipo de mango.

La razón el término ' mango ' se utiliza es lo importante. Que les indica como una identificación o acceso tipo de objeto. Es decir, para el programador, que representan una 'clave' o acceso a algo.

HANDLE hnd; es el mismo que void * ptr;

MANGO es un typedef se define en el archivo winnt.h en Visual Studio (Windows):

typedef void *HANDLE;

Más información sobre MANIPULAR

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top