Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Иногда метод выделяет буфер памяти в куче и возвращает адрес буфера вызывающему объекту. COM определяет пару функций для выделения и освобождения памяти в куче.
- Функция CoTaskMemAlloc выделяет блок памяти.
- Функция CoTaskMemFree освобождает блок памяти, выделенный CoTaskMemAlloc.
Мы видели пример этого шаблона в примере диалогового окна Открыть:
PWSTR pszFilePath;
hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath);
if (SUCCEEDED(hr))
{
// ...
CoTaskMemFree(pszFilePath);
}
Метод GetDisplayName выделяет память для строки. Внутри метода вызывается CoTaskMemAlloc для выделения строки. Когда метод возвращается, pszFilePath указывает на расположение памяти нового буфера. Вызывающий объект отвечает за вызов CoTaskMemFree для освобождения памяти.
Почему COM определяет собственные функции выделения памяти? Одна из причин заключается в предоставлении слоя абстракции по кучи распределителя. В противном случае некоторые методы могут вызывать malloc, а другие называются новых. Затем вашей программе потребуется вызвать бесплатные в некоторых случаях и удалить в других случаях и отслеживать все это быстро станет невозможным. Функции выделения COM создают единый подход.
Еще одно соображение заключается в том, что COM является двоичным стандартом, поэтому он не привязан к конкретному языку программирования. Таким образом, COM не может полагаться на любую языковую форму выделения памяти.
Следующий