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

参照

IHttpUser インターフェイス