IHttpUser::D ereferenceUser 方法

递减用户内部引用计数。

语法

virtual VOID DereferenceUser(  
   VOID  
) = 0;  

参数

此方法不采用参数。

线程安全性

实现 IHttpUser 接口的类是 ReferenceUserDereferenceUser 方法的线程安全类。

备注

实现 接口的 IHttpUser 类使用对内存管理而言是线程安全的引用计数。 IHttpUser构造指针时,内部引用计数 (private成员变量) 设置为 1。 ReferenceUser调用 方法时,此引用计数将递增 1。 DereferenceUser调用 方法时,同一引用计数将递减 1。 仅当引用计数为 0 时, IHttpUser 接口才会从堆中删除。 此方案保证在 IHttpUser 指针的最后一个客户端调用 DereferenceUser 方法之前不会删除指针。

实现者须知

ReferenceUserDereferenceUser 方法实现对于指针应是IHttpUser线程安全的。 实现者应仅提供专用或受保护的析构函数,这些析构函数仅在引用计数为 0 时调用。

对调用者的说明

客户端不应尝试将接口强制转换为IHttpUser更具体的类,然后直接调用delete;客户端应改为在检索到接口的指针时恰好调用ReferenceUser方法一IHttpUser次,然后在不再访问接口时IHttpUser调用DereferenceUser方法。 应分别尽早和尽可能晚地调用 ReferenceUserDereferenceUser 方法,以确保 IHttpUser 指针在访问堆时在堆上有效,并在不再需要时删除该指针。

示例

下面的代码示例演示了一个名为 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;  
}  

要求

类型 说明
客户端 - 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 接口