Partilhar via


Alocação de memória em COM

Às vezes, um método aloca um buffer de memória na pilha e retorna o endereço do buffer para o chamador. COM define um par de funções para alocar e liberar memória na pilha.

  • A funçãoCoTaskMemAlloc aloca um bloco de memória.
  • A função CoTaskMemFree libera um bloco de memória que foi alocado com CoTaskMemAlloc.

Vimos um exemplo desse padrão no exemplo da caixa de diálogo Abrir :

PWSTR pszFilePath;
hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath);
if (SUCCEEDED(hr))
{
    // ...
    CoTaskMemFree(pszFilePath);
}

O GetDisplayName método aloca memória para uma cadeia de caracteres. Internamente, o método chama CoTaskMemAlloc para alocar a cadeia de caracteres. Quando o método retorna, pszFilePath aponta para o local da memória do novo buffer. O chamador é responsável por chamar CoTaskMemFree para liberar a memória.

Por que o COM define suas próprias funções de alocação de memória? Uma razão é fornecer uma camada de abstração sobre o alocador de pilha. Caso contrário, alguns métodos podem chamar malloc enquanto outros chamam novo. Então seu programa precisaria chamar gratuito em alguns casos e excluir em outros, e manter o controle de tudo isso rapidamente se tornaria impossível. As funções de atribuição COM criam uma abordagem uniforme.

Outra consideração é o fato de que COM é um padrão de binário, portanto, não está vinculado a uma linguagem de programação específica. Portanto, COM não pode confiar em qualquer forma específica de linguagem de alocação de memória.

Seguinte

Práticas de codificação COM