Udostępnij przez


Alokacja pamięci w modelu COM

Czasami metoda przydziela bufor pamięci na stercie i zwraca adres buforu do obiektu wywołującego. Com definiuje parę funkcji przydzielania i zwalniania pamięci na stercie.

W przykładzie okna dialogowego otwieranie widzieliśmy przykład tego wzorca:

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

Metoda GetDisplayName przydziela pamięć dla ciągu. Wewnętrznie metoda wywołuje CoTaskMemAlloc w celu przydzielenia ciągu. Gdy metoda zwróci, pszFilePath wskazuje lokalizację pamięci nowego buforu. Obiekt wywołujący jest odpowiedzialny za wywołanie CoTaskMemFree w celu zwolnienia pamięci.

Dlaczego com definiuje własne funkcje alokacji pamięci? Jednym z powodów jest zapewnienie warstwy abstrakcji na alokatorze stert. W przeciwnym razie niektóre metody mogą wywoływać malloc, podczas gdy inne nazywane nowym. Następnie program musi wywołać bezpłatne w niektórych przypadkach i usunąć w innych, a śledzenie tego wszystkiego szybko stałoby się niemożliwe. Funkcje alokacji MODELU COM tworzą jednolite podejście.

Innym zagadnieniem jest fakt, że COM jest standardem binarnym, więc nie jest powiązany z określonym językiem programowania. W związku z tym com nie może polegać na żadnej formie alokacji pamięci specyficznej dla języka.

Następny

praktyk kodowania COM