参照カウント

更新 : 2007 年 11 月

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

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

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

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

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

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

4947zb56.alert_note(ja-jp,VS.90).gifメモ :

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

参照

参照

COM の概要

Managing Object Lifetimes through Reference Counting