Domanda

Mi è stato detto che un handle è una sorta di puntatore, ma non e che permette di mantenere un riferimento a un oggetto, piuttosto che l'oggetto stesso.Che cosa è più elaborato una spiegazione?

È stato utile?

Soluzione

Una maniglia può essere qualsiasi cosa, da un indice intero a un puntatore ad una risorsa nello spazio del kernel. L'idea è che forniscono un'astrazione di una risorsa, quindi non hanno bisogno di sapere molto circa la risorsa stessa usarlo.

Ad esempio, l'HWND negli API Win32 è una maniglia per una finestra. Di per sé è inutile: non è possibile raccogliere tutte le informazioni da esso. Ma passarlo alle funzioni API di destra, ed è possibile eseguire una vasta gamma di diversi trucchi con esso. Internamente si può pensare l'HWND come solo un indice nella tabella delle finestre della GUI (che può non essere necessariamente come è implementato, ma rende la magia ha senso).

EDIT: Non sicuro al 100% che cosa specificamente che stavi chiedendo nella sua interrogazione. Questo sta parlando soprattutto di puro C / C ++.

Altri suggerimenti

Un manico è un puntatore o indice con nessun tipo visibile collegato ad esso. Di solito si vede qualcosa di simile:

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

Quindi nel tuo codice appena passa trattano circa come un valore opaco.

Nel codice che utilizza l'oggetto, si getta il puntatore ad un tipo di vera e propria struttura e lo utilizza:

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

O usa come indice per un array / vettore:

 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);
     }
 }

Una maniglia è una sorta di puntatore che è tipicamente un modo referenziare qualche entità.

Sarebbe più esatto dire che un puntatore è un tipo di maniglia, ma non tutte le maniglie sono puntatori.

Per esempio, una maniglia può anche essere qualche indice in una tabella di memoria a, che corrisponde a una voce che contiene a sua volta un puntatore a un oggetto.

La cosa fondamentale è che quando si ha un "manico", è né sapere, né interessa come che gestiscono in realtà finisce per identificare la cosa che identifica, tutto quello che dovete sapere è che lo fa.

Dovrebbe anche essere chiaro che non esiste una sola risposta alla domanda "che cosa è esattamente un manico", perché le maniglie a cose diverse, anche nello stesso sistema, possono essere implementate in modo diverso "sotto il cofano". Ma non dovrebbe essere necessario essere preoccupati di queste differenze.

In C ++ / CLI, una maniglia è un puntatore ad un oggetto situato sul mucchio GC. La creazione di un oggetto sul mucchio (non gestito) C ++ si ottiene utilizzando new e il risultato di un'espressione new è un puntatore "normale". Un oggetto gestito è allocato sul GC (gestita) cumulo con un'espressione gcnew. Il risultato sarà una maniglia. Non si può fare l'aritmetica dei puntatori sulle maniglie. Tu fai maniglie non liberi. Il GC si prenderà cura di loro. Inoltre, il GC è libero di spostare oggetti sullo heap gestito e aggiornare le maniglie per indicare le nuove posizioni, mentre il programma è in esecuzione.

Questo appare nel contesto della Manico-Corpo-Linguaggio, chiamato anche Pimpl idioma.Permette di mantenere l'ABI (binary interface) di una biblioteca stessa, da talmente semplice mantenere aggiornati i dati effettivi in un'altra classe di oggetti, che è semplicemente riferimento a un puntatore detenuti in un "manico" oggetto, che consiste di funzioni di delegato per la classe "Corpo".

E ' anche utile per attivare la costante di tempo e di eccezione sicuro swap di due oggetti.Per questo, solo il puntatore che punta al corpo oggetto deve essere scambiato.

Una maniglia è quello che vuoi che sia.

Una maniglia può essere un intero senza segno utilizzato in qualche tabella di ricerca.

Una maniglia può essere un puntatore a, o in un insieme più ampio di dati.

Dipende da come il codice che utilizza la maniglia si comporta. Che determina il tipo maniglia.

Il motivo per il termine ' Maniglia ' viene usato è ciò che è importante. Che li indica come identificazione o di accesso tipo di oggetto. Significato, al programmatore, rappresentano una 'chiave' o l'accesso a qualcosa.

HANDLE hnd; è lo stesso di void * ptr;

MANICO è un typedef definito nel file winnt.h in Visual Studio (Windows):

typedef void *HANDLE;

Per saperne di più MANICO

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top