COM でのメモリ割り当て

メソッドがヒープにメモリ バッファーを割り当て、バッファーのアドレスを呼び出し元に返す場合があります。 COM は、ヒープ上のメモリを割り当て、解放するための関数のペアを定義します。

[ 開く] ダイアログ ボックスの例で、このパターンの例を確認しました。

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

GetDisplayName メソッドは、文字列のメモリを割り当てます。 メソッドは内部的に CoTaskMemAlloc を呼び出して文字列を割り当てます。 メソッドが戻ると、 pszFilePath は新しいバッファーのメモリ位置を指します。 呼び出し元は、 CoTaskMemFree を呼び出してメモリを解放する必要があります。

COM が独自のメモリ割り当て関数を定義する理由 理由の 1 つは、ヒープ アロケーターに対して抽象化レイヤーを提供するためです。 それ以外の場合、一部のメソッドは malloc を呼び出し、他のメソッドは new と呼ばれます。 その後、あなたのプログラムは場合によっては 無料 で呼び出し、他の人で 削除 する必要があり、それを追跡することはすぐに不可能になります。 COM 割り当て関数は、統一されたアプローチを作成します。

もう 1 つの考慮事項は、COM が バイナリ 標準であるため、特定のプログラミング言語に関連付けられていないという事実です。 したがって、COM は言語固有の形式のメモリ割り当てに依存できません。

次へ

COM コーディングプラクティス