递增用户内部引用计数。
语法
virtual VOID ReferenceUser(
VOID
) = 0;
参数
此方法不采用参数。
线程安全性
实现 IHttpUser 接口的类对于 和 DereferenceUser 方法是ReferenceUser线程安全的。
备注
实现 接口的 IHttpUser 类使用线程安全的引用计数进行内存管理。 IHttpUser构造指针时,成员变量 (private内部引用计数) 设置为 1。 ReferenceUser调用 方法时,此引用计数递增 1。 DereferenceUser调用 方法时,相同的引用计数将递减 1。 IHttpUser仅当引用计数为 0 时,才会从堆中删除接口。 此方案保证在指针 IHttpUser 的最后一个客户端调用 DereferenceUser 方法之前不会删除指针。
实现者须知
ReferenceUser和 DereferenceUser 方法实现对于指针应是IHttpUser线程安全的。 实现者应仅 private 提供仅在引用计数为 0 时调用的或 protected 析构函数。
对调用者的说明
客户端不应尝试将接口强制转换为IHttpUser更具体的类,然后直接调用delete;客户端应改为在检索指向接口的指针时恰好调用ReferenceUser方法一IHttpUser次,然后在不再访问接口时IHttpUser调用 DereferenceUser 方法。 应尽早和尽可能晚地调用 ReferenceUser 和 DereferenceUser 方法,以确保 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()
{
}
// 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 |