Sdílet prostřednictvím


Přidělení paměti v modelu COM

Někdy metoda přidělí vyrovnávací paměť na haldě a vrátí adresu vyrovnávací paměti volajícímu. Com definuje dvojici funkcí pro přidělování a uvolnění paměti v haldě.

Příklad tohoto vzoru jsme viděli v příkladu dialogového okna Otevřít:

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

Metoda GetDisplayName přidělí paměť pro řetězec. Interně metoda volá CoTaskMemAlloc přidělení řetězce. Když metoda vrátí, pszFilePath odkazuje na umístění paměti nové vyrovnávací paměti. Volající zodpovídá za volání CoTaskMemFree uvolnit paměť.

Proč com definuje vlastní funkce přidělování paměti? Jedním z důvodů je poskytnout abstrakci vrstvy nad alokátorem haldy. V opačném případě mohou některé metody volat malloc, zatímco jiné volají nové. Pak by váš program potřeboval zavolat zdarma v některých případech a odstranit v jiných a sledovat vše by se rychle stalo nemožné. Funkce přidělování modelu COM vytvářejí jednotný přístup.

Dalším aspektem je skutečnost, že COM je binární standard, takže není svázaný s konkrétním programovacím jazykem. Com proto nemůže spoléhat na žádnou jazykovou formu přidělení paměti.

Další

postupy kódování modelu COM