参照カウント

COM 自身は、オブジェクトが不要になったと判断しても、メモリから自動的にオブジェクトを削除するわけではありません。 不要なオブジェクトの削除は、オブジェクトのプログラマが行います。 プログラマは、参照カウントに基づいて、オブジェクトを削除できるかどうかを判断します。

COM は、IUnknownAddRef メソッドと Release メソッドを使用して、オブジェクトのインターフェイスの参照カウントを管理します。 これらのメソッドを呼び出す一般的な規則は次のとおりです。

  • クライアントは、インターフェイス ポインターを受け取るたびに、そのインターフェイスの AddRef を呼び出す必要があります。

  • クライアントは、インターフェイス ポインターの使用を終えるたびに、Release を呼び出す必要があります。

単純な実装では、AddRef を呼び出すたびにオブジェクト内部のカウンター変数が増え、Release を呼び出すたびにカウンター変数が減ります。 カウントが 0 に戻ると、インターフェイスのユーザーはいないため、インターフェイスはメモリから自分自身を削除します。

個別のインターフェイスへの参照でなく、オブジェクトへの参照をカウントできるように、参照カウントを実装することもできます。 この場合、AddRef または Release を呼び出すと、オブジェクトの中心的な実装が代わりに呼び出されます。また、Release を呼び出すと、参照カウントが 0 に達したときオブジェクト全体が解放されます。

注意

new 演算子を使用して CComObject からオブジェクトを派生したとき、参照カウントは 0 になります。 そのため、CComObject から派生したオブジェクトを作成した後で、AddRef を呼び出す必要があります。

参照

参照

COM の概要

Managing Object Lifetimes through Reference Counting