共用方式為


COM 中的記憶體配置

有時候方法會在堆積上配置記憶體緩衝區,並將緩衝區的位址傳回給呼叫端。 COM 定義一組函式,用於配置和釋放堆積上的記憶體。

我們在 [開啟] 對話框範例中看到此模式的範例:

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

GetDisplayName 方法會配置字串的記憶體。 在內部,方法會呼叫 CoTaskMemAlloc 來配置字串。 當方法傳回時,pszFilePath 指向新緩衝區的記憶體位置。 呼叫者負責呼叫 coTaskMemFree 來釋放記憶體。

為什麼 COM 會定義自己的記憶體配置函式? 其中一個原因是在堆積配置器上提供抽象層。 否則,某些方法可能會呼叫 malloc,而其他方法則呼叫 新的。 然後,您的程式必須呼叫 免費 在某些情況下,並 刪除其他,並追蹤這一切很快就會變得不可能。 COM 配置函式會建立統一的方法。

另一個考慮是 COM 是 二進位 標準,因此它不會繫結至特定的程式設計語言。 因此,COM 無法依賴任何語言特定的記憶體配置形式。

下一個

COM 編碼作法