ユーザー内部参照数をデクリメントします。
構文
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 |