Partager via


Allocation de mémoire dans COM

Parfois, une méthode alloue une mémoire tampon sur le tas et retourne l’adresse de la mémoire tampon à l’appelant. COM définit une paire de fonctions pour allouer et libérer de la mémoire sur le tas.

Nous avons vu un exemple de ce modèle dans l’exemple de boîte de dialogue Ouvrir :

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

La méthode GetDisplayName alloue de la mémoire pour une chaîne. En interne, la méthode appelle CoTaskMemAlloc pour allouer la chaîne. Lorsque la méthode est retournée, pszFilePath pointe vers l’emplacement de mémoire du nouveau tampon. L’appelant est chargé d’appeler CoTaskMemFree pour libérer la mémoire.

Pourquoi COM définit-il ses propres fonctions d’allocation de mémoire ? Une des raisons est de fournir une couche d’abstraction sur l’allocateur de tas. Sinon, certaines méthodes peuvent appeler malloc tandis que d’autres ont appelé nouvelle. Ensuite, votre programme devra appeler gratuite dans certains cas et supprimer dans d’autres, et garder le suivi de tout cela serait rapidement impossible. Les fonctions d’allocation COM créent une approche uniforme.

Une autre considération est le fait que COM est un binaire standard, de sorte qu’il n’est pas lié à un langage de programmation particulier. Par conséquent, COM ne peut pas s’appuyer sur une forme spécifique au langage d’allocation de mémoire.

Prochain

pratiques de codage COM