IHttpUser::ReferenceUser 方法

递增用户内部引用计数。

语法

virtual VOID ReferenceUser(  
   VOID  
) = 0;  

参数

此方法不采用参数。

线程安全性

实现 IHttpUser 接口的类对于 和 DereferenceUser 方法是ReferenceUser线程安全的。

备注

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

实现者须知

ReferenceUserDereferenceUser 方法实现对于指针应是IHttpUser线程安全的。 实现者应仅 private 提供仅在引用计数为 0 时调用的或 protected 析构函数。

对调用者的说明

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

示例

下面的代码示例演示了实现 接口的名为 MyHttpUserIHttpUser 类。

// 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()  
    {  
  
    }  
  
    // Create a 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 接口