Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
A volte un metodo alloca un buffer di memoria nell'heap e restituisce l'indirizzo del buffer al chiamante. COM definisce una coppia di funzioni per l'allocazione e la liberazione della memoria nell'heap.
- La funzioneCoTaskMemAlloc alloca un blocco di memoria.
- La funzioneCoTaskMemFreelibera un blocco di memoria allocato con CoTaskMemAlloc.
È stato illustrato un esempio di questo modello nella finestra di dialogo apri esempio:
PWSTR pszFilePath;
hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath);
if (SUCCEEDED(hr))
{
// ...
CoTaskMemFree(pszFilePath);
}
Il metodoGetDisplayNamealloca memoria per una stringa. Internamente, il metodo chiama CoTaskMemAlloc per allocare la stringa. Quando il metodo termina, pszFilePath punta alla posizione di memoria del nuovo buffer. Il chiamante è responsabile della chiamata CoTaskMemFree per liberare la memoria.
Perché COM definisce le proprie funzioni di allocazione della memoria? Un motivo è fornire un livello di astrazione sull'allocatore heap. In caso contrario, alcuni metodi potrebbero chiamare malloc mentre altri denominati nuovo. Il programma dovrà quindi chiamare gratis in alcuni casi e eliminare in altri, e tenere traccia di tutto sarebbe diventato rapidamente impossibile. Le funzioni di allocazione COM creano un approccio uniforme.
Un'altra considerazione è il fatto che COM è un binario standard, quindi non è legato a un particolare linguaggio di programmazione. Pertanto, COM non può basarsi su qualsiasi forma di allocazione di memoria specifica del linguaggio.
Prossimo