Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
A veces, un método asigna un búfer de memoria en el montón y devuelve la dirección del búfer al autor de la llamada. COM define un par de funciones para asignar y liberar memoria en el montón.
- La funciónCoTaskMemAlloc asigna un bloque de memoria.
- La funciónCoTaskMemFree libera un bloque de memoria asignado con CoTaskMemAlloc.
Hemos visto un ejemplo de este patrón en el ejemplo del cuadro de diálogo Abrir :
PWSTR pszFilePath;
hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath);
if (SUCCEEDED(hr))
{
// ...
CoTaskMemFree(pszFilePath);
}
El método GetDisplayName asigna memoria para una cadena. Internamente, el método llama CoTaskMemAlloc para asignar la cadena. Cuando el método devuelve, pszFilePath apunta a la ubicación de memoria del nuevo búfer. El autor de la llamada es responsable de llamar a CoTaskMemFree para liberar la memoria.
¿Por qué COM define sus propias funciones de asignación de memoria? Una razón es proporcionar una capa de abstracción sobre el asignador del montón. De lo contrario, algunos métodos pueden llamar a malloc, mientras que otros denominados nuevos. A continuación, el programa tendría que llamar a gratis en algunos casos y eliminar en otros, y realizar un seguimiento de todo ello se volvería rápidamente imposible. Las funciones de asignación COM crean un enfoque uniforme.
Otra consideración es el hecho de que COM es un binario estándar, por lo que no está vinculado a un lenguaje de programación determinado. Por lo tanto, COM no puede basarse en ninguna forma específica del lenguaje de asignación de memoria.
Próximo
procedimientos de codificación COM