IHttpUser::D ereferenceUser メソッド
ユーザー内部参照数をデクリメントします。
構文
virtual VOID DereferenceUser(
VOID
) = 0;
パラメーター
このメソッドは、パラメーターを受け取りません。
スレッド セーフ
IHttpUser インターフェイスを実装するクラスは、ReferenceUser および DereferenceUser
メソッドのスレッド セーフです。
解説
インターフェイスを IHttpUser
実装するクラスは、メモリ管理にスレッド セーフな参照カウントを使用します。 ポインターが IHttpUser
構築されると、内部参照カウント ( private
メンバー変数) は 1 に設定されます。 メソッドが ReferenceUser
呼び出されると、この参照カウントは 1 ずつインクリメントされます。 メソッドが DereferenceUser
呼び出されると、この同じ参照カウントが 1 ずつデクリメントされます。 参照カウントが 0 になった場合にのみ、インターフェイスが IHttpUser
ヒープから削除されます。 このスキームでは、ポインターの最後の IHttpUser
クライアントが メソッドを呼び出すまで、ポインターが削除されないことが DereferenceUser
保証されます。
実装側の注意
ReferenceUser
メソッドと DereferenceUser
メソッドの実装は、ポインターのスレッド セーフであるIHttpUser
必要があります。 実装者は、参照カウントが 0 になったときにのみ呼び出されるプライベートまたは保護されたデストラクターのみを提供する必要があります。
呼び出し元に関する注意事項
クライアントは、インターフェイスをより具体的なクラスにキャストIHttpUser
してから直接呼び出delete
すべきではありません。代わりに、インターフェイスへのIHttpUser
ポインターが取得されたときにメソッドを 1 回だけ呼び出ReferenceUser
し、インターフェイスにアクセスできなくなったときに メソッドをIHttpUser
呼び出すDereferenceUser
必要があります。 ポインターがアクセスされたときにヒープで有効になり、不要になったときに削除されるようにIHttpUser
するには、 メソッドと DereferenceUser
メソッドをそれぞれできるだけ早く、できるだけ遅く呼び出ReferenceUser
す必要があります。
例
次のコード例は、 インターフェイスを実装する という MyHttpUser
クラスを IHttpUser
示しています。
// Create a class that implements the IHttpUser interface.
class MyHttpUser : public IHttpUser
{
public:
// Create a public constructor.
// Set the internal reference count to 1.
MyHttpUser()
{
m_cRefs = 1;
}
// Increment the internal reference count.
virtual VOID ReferenceUser(VOID)
{
InterlockedIncrement(&m_cRefs);
}
// Decrement the internal reference count.
virtual VOID DereferenceUser(VOID)
{
// Decrement the reference count and call delete this
// if the count is 0.
if (0 == InterlockedDecrement(&m_cRefs))
{
delete this;
}
}
private:
// Create a private destructor called from DereferenceUser.
virtual ~MyHttpUser()
{
}
//Private reference count member.
LONG m_cRefs;
}
要件
Type | 説明 |
---|---|
Client | - Windows Vista 上の IIS 7.0 - Windows 7 上の IIS 7.5 - Windows 8 上の IIS 8.0 - Windows 10の IIS 10.0 |
サーバー | - Windows Server 2008 の IIS 7.0 - Windows Server 2008 R2 の IIS 7.5 - Windows Server 2012 の IIS 8.0 - Windows Server 2012 R2 の IIS 8.5 - Windows Server 2016の IIS 10.0 |
製品 | - IIS 7.0、IIS 7.5、IIS 8.0、IIS 8.5、IIS 10.0 - IIS Express 7.5、IIS Express 8.0、IIS Express 10.0 |
Header | Httpserv.h |