IHttpUser::ReferenceUser 方法
递增用户内部引用计数。
语法
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 |