参照カウント
更新 : 2007 年 11 月
COM 自身は、オブジェクトが不要になったと判断しても、メモリから自動的にオブジェクトを削除するわけではありません。不要なオブジェクトの削除は、オブジェクトのプログラマが行います。プログラマは、参照カウントに基づいて、オブジェクトを削除できるかどうかを判断します。
COM は、IUnknown の AddRef メソッドと Release メソッドを使用して、オブジェクトのインターフェイスの参照カウントを管理します。これらのメソッドを呼び出す一般的な規則は次のとおりです。
クライアントは、インターフェイス ポインタを受け取るたびに、そのインターフェイスの AddRef を呼び出す必要があります。
クライアントは、インターフェイス ポインタの使用を終えるたびに、Release を呼び出す必要があります。
単純な実装では、AddRef を呼び出すたびにオブジェクト内部のカウンタ変数が増え、Release を呼び出すたびにカウンタ変数が減ります。カウントが 0 に戻ると、インターフェイスのユーザーはいないため、インターフェイスはメモリから自分自身を削除します。
個別のインターフェイスへの参照でなく、オブジェクトへの参照をカウントできるように、参照カウントを実装することもできます。この場合、AddRef または Release を呼び出すと、オブジェクトの中心的な実装が代わりに呼び出されます。また、Release を呼び出すと、参照カウントが 0 に達したときオブジェクト全体が解放されます。
メモ : |
---|
new 演算子を使用して CComObject からオブジェクトを派生したとき、参照カウントは 0 になります。そのため、CComObject から派生したオブジェクトを作成した後で、AddRef を呼び出す必要があります。 |