Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.
- Funkcja CoTaskMemAlloc przydziela blok pamięci.
- Funkcja CoTaskMemFree zwalnia blok pamięci przydzielony CoTaskMemAlloc.
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