Share via


IHttpCacheSpecificData::DereferenceCacheData Method

 

Decrements the internal reference count for the cached data.

Syntax

virtual VOID DereferenceCacheData(  
   VOID  
) = 0;  

Parameters

This method takes no parameters.

Thread Safety

Classes that implement the IHttpCacheSpecificData interface are thread safe for the DereferenceCacheData and ReferenceCacheData methods.

Remarks

Classes that implement the IHttpCacheSpecificData interface use reference counting that is thread safe for memory management. When an IHttpCacheSpecificData pointer is constructed, the internal reference count (a private member variable) is set to 1. When the ReferenceCacheData method is called, this reference count is incremented by 1. When the DereferenceCacheData method is called, this same reference count is decremented by 1. Only when the reference count goes to 0 is the IHttpCacheSpecificData pointer removed from the heap. This scheme guarantees that the IHttpCacheSpecificData pointer will not be deleted until the last client of that pointer calls DereferenceCacheData.

Notes for Implementers

The ReferenceCacheData and DereferenceCacheData method implementations should be thread safe for an IHttpCacheSpecificData interface. Implementers should provide protected or private destructors that are called internally only when the reference count goes to 0.

Notes for Callers

Clients should never attempt to cast an IHttpCacheSpecificData interface to a more specific class and then call delete directly. Clients should instead call the ReferenceCacheData method exactly once when a pointer to an IHttpCacheSpecificData interface is retrieved, and then call the DereferenceCacheData method when the IHttpCacheSpecificData pointer will no longer be accessed. You should call the ReferenceCacheData and DereferenceCacheData methods as early and as late as possible, respectively, to guarantee that an IHttpCacheSpecificData pointer will be valid on the heap when it is accessed and deleted when it is no longer needed.

Example

The following code example demonstrates a class called MySpecificData that implements the IHttpCacheSpecificData methods.

// 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;  
}  

Requirements

Type Description
Client - IIS 7.0 on Windows Vista
- IIS 7.5 on Windows 7
- IIS 8.0 on Windows 8
- IIS 10.0 on Windows 10
Server - IIS 7.0 on Windows Server 2008
- IIS 7.5 on Windows Server 2008 R2
- IIS 8.0 on Windows Server 2012
- IIS 8.5 on Windows Server 2012 R2
- IIS 10.0 on Windows Server 2016 Technical Preview
Product - 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

See Also

IHttpCacheSpecificData Interface
IHttpFileInfo Interface
IHttpTokenEntry Interface