次の方法で共有


IHttpCacheSpecificData::D ereferenceCacheData メソッド

キャッシュされたデータの内部参照カウントをデクリメントします。

構文

virtual VOID DereferenceCacheData(  
   VOID  
) = 0;  

パラメーター

このメソッドは、パラメーターを受け取りません。

スレッド セーフ

IHttpCacheSpecificData インターフェイスを実装するクラスは、 メソッドと ReferenceCacheData メソッドのスレッド セーフDereferenceCacheDataです。

解説

インターフェイスを IHttpCacheSpecificData 実装するクラスは、メモリ管理にスレッド セーフな参照カウントを使用します。 ポインターが IHttpCacheSpecificData 構築されると、内部参照カウント ( private メンバー変数) が 1 に設定されます。 メソッドが ReferenceCacheData 呼び出されると、この参照カウントは 1 ずつインクリメントされます。 メソッドが DereferenceCacheData 呼び出されると、この同じ参照カウントが 1 ずつデクリメントされます。 参照カウントが 0 になった場合にのみ、 IHttpCacheSpecificData ヒープからポインターが削除されます。 このスキームでは、ポインターの最後の IHttpCacheSpecificData クライアントが を呼び出 DereferenceCacheDataすまで、ポインターが削除されないことが保証されます。

実装側の注意

ReferenceCacheDataおよび DereferenceCacheData メソッドの実装は、インターフェイスのスレッド セーフであるIHttpCacheSpecificData必要があります。 実装者は、参照カウントが 0 になったときにのみ内部的に呼び出される デストラクターまたは private デストラクターを提供protectedする必要があります。

呼び出し元に関する注意事項

クライアントは、インターフェイスをより具体的な IHttpCacheSpecificData クラスにキャストしてから、直接を呼び出 delete そうとしないでください。 クライアントは、インターフェイスへのポインターがReferenceCacheData取得されたときにメソッドを 1 回だけ呼び出し、ポインターがアクセスされなくなったときに メソッドをIHttpCacheSpecificData呼び出すDereferenceCacheData必要IHttpCacheSpecificDataがあります。 メソッドと DereferenceCacheData メソッドはできるだけ早く、できるだけ遅く呼び出ReferenceCacheDataして、ポインターがIHttpCacheSpecificDataアクセスされ、不要になったときに削除されたときにヒープで有効であることを保証する必要があります。

次のコード例は、 メソッドを実装する というクラス MySpecificDataIHttpCacheSpecificData 示しています。

// Create a class that implements the IHttpCacheSpecificData interface.  
class MySpecificData : public IHttpCacheSpecificData  
{  
public:  
    // Create a public constructor.  
    // Set the internal reference count to 1.  
    MySpecificData ()  
    {  
        m_cRefs = 1;  
    }  
  
    // Increment the internal reference count.  
    virtual VOID ReferenceCacheData(VOID)  
    {  
        InterlockedIncrement(&m_cRefs);  
    }  
  
    // Decrement the internal reference count.  
    virtual VOID DereferenceCacheData(VOID)  
    {  
        // Decrement the reference count and delete this  
        // if the count is 0.  
        if (0 == InterlockedDecrement(&m_cRefs))  
        {  
            delete this;  
        }  
    }  
  
    // To do: implement custom MySpecificData implementation.  
  
private:  
    // Create a private destructor called from DereferenceCacheData.  
    virtual ~MySpecificData ()  
    {  
  
    }  
  
    // Create a 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

参照

IHttpCacheSpecificData インターフェイス
IHttpFileInfo インターフェイス
IHttpTokenEntry インターフェイス