Asignación de memoria en COM
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ón CoTaskMemAlloc asigna un bloque de memoria.
- La función CoTaskMemFree 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 a 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 podrían llamar a malloc , mientras que otros llamaron nuevos. Después, el programa tendría que llamar gratis en algunos casos y eliminar en otros, y realizar un seguimiento de todo 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 estándar binario , por lo que no está vinculado a un lenguaje de programación determinado. Por lo tanto, COM no puede basarse en cualquier forma específica del lenguaje de asignación de memoria.
Siguientes
Procedimientos de codificación COM