IHttpUser::D ereferenceUser 方法
递减用户内部引用计数。
语法
virtual VOID DereferenceUser(
VOID
) = 0;
参数
此方法不采用参数。
线程安全性
实现 IHttpUser 接口的类是 ReferenceUser 和 DereferenceUser
方法的线程安全类。
备注
实现 接口的 IHttpUser
类使用对内存管理而言是线程安全的引用计数。 IHttpUser
构造指针时,内部引用计数 (private
成员变量) 设置为 1。 ReferenceUser
调用 方法时,此引用计数将递增 1。 DereferenceUser
调用 方法时,同一引用计数将递减 1。 仅当引用计数为 0 时, IHttpUser
接口才会从堆中删除。 此方案保证在 IHttpUser
指针的最后一个客户端调用 DereferenceUser
方法之前不会删除指针。
实现者须知
ReferenceUser
和 DereferenceUser
方法实现对于指针应是IHttpUser
线程安全的。 实现者应仅提供专用或受保护的析构函数,这些析构函数仅在引用计数为 0 时调用。
对调用者的说明
客户端不应尝试将接口强制转换为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()
{
}
//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 |