参照カウント
COM 自体は、オブジェクトが使用されなくなったと判断したとき、メモリからオブジェクトを自動的に削除しようとしません。 代わりに、使用されていないオブジェクトはオブジェクト プログラマで削除する必要があります。 プログラマは、参照カウントに基づいてオブジェクトを削除できるかどうかを判断します。
COM では IUnknown
メソッドの AddRef と Release を使用し、オブジェクト上のインターフェイスの参照カウントを管理します。 これらのメソッドを呼び出すための一般的な規則は次のとおりです。
クライアントがインターフェイス ポインターを受け取るたびに、インターフェイス上で
AddRef
が呼び出される必要があります。クライアントはインターフェイス ポインターの使用を終了するたびに、
Release
を呼び出す必要があります。
単純な実装では、オブジェクト内のカウンター変数が AddRef
が呼び出されるたびにインクリメントされ、Release
が呼び出されるたびにデクリメントされます。 カウントがゼロに戻ると、インターフェイスにはユーザーが含まれなくなり、インターフェイスはそれ自体をメモリから自由に削除できます。
参照カウントは、(個々のインターフェイスではなく) オブジェクトへの各参照がカウントされるように実装することもできます。 この場合、AddRef
および Release
呼び出しはそれぞれ、オブジェクト上で中心の実装にデリゲートされ、その参照カウントがゼロに到達すると、Release
によってオブジェクト全体が解放されます。
Note
CComObject
派生オブジェクトが new
演算子を使用して構築されるとき、参照カウントは 0 になります。 したがって、AddRef
は、CComObject
派生オブジェクトが正常に作成された後に呼び出す必要があります。