IHttpCacheSpecificData::ReferenceCacheData 方法
递增缓存数据的内部引用计数。
语法
virtual VOID ReferenceCacheData(
VOID
) = 0;
参数
此方法不采用参数。
线程安全性
实现 IHttpCacheSpecificData 接口的类是 DereferenceCacheData 和 ReferenceCacheData
方法的线程安全类。
备注
实现 接口的 IHttpCacheSpecificData
类使用对内存管理而言是线程安全的引用计数。 IHttpCacheSpecificData
构造指针时,内部引用计数 (private
成员变量) 设置为 1。 ReferenceCacheData
调用 方法时,此引用计数将递增 1。 DereferenceCacheData
调用 方法时,同一引用计数将递减 1。 仅当引用计数为 0 时, IHttpCacheSpecificData
才会从堆中删除指针。 此方案保证在指针 IHttpCacheSpecificData
的最后一个客户端调用 DereferenceCacheData
之前不会删除指针。
实现者须知
ReferenceCacheData
和 DereferenceCacheData
方法实现对于接口应是IHttpCacheSpecificData
线程安全的。 实现者应提供 protected
或 private
析构函数,仅在引用计数为 0 时在内部调用。
对调用者的说明
客户端绝不应尝试将指针强制转换为 IHttpCacheSpecificData
更具体的类,然后直接调用 delete
。 当检索到接口的ReferenceCacheData
指针时,客户端应恰好调用方法一IHttpCacheSpecificData
次,然后在不再访问指针时IHttpCacheSpecificData
调用DereferenceCacheData
方法。 应分别尽早和尽可能晚地调用 ReferenceCacheData
和 DereferenceCacheData
方法,以确保 IHttpCacheSpecificData
指针在访问堆时在堆上有效,并在不再需要时删除该指针。
示例
下面的代码示例演示了一个名为 MySpecificData
的类,该 IHttpCacheSpecificData
类实现了 方法。
// Create a class that implements the IHttpCacheSpecificData interface.
class MySpecificData : public IHttpCacheSpecificData
{
public:
// Create a public constructor.
// Set the internal reference count to 1.
MySpecificData ()
{
m_cRefs = 1;
}
// Increment the internal reference count.
virtual VOID ReferenceCacheData(VOID)
{
InterlockedIncrement(&m_cRefs);
}
// Decrement the internal reference count.
virtual VOID DereferenceCacheData(VOID)
{
// Decrement the reference count and delete this
// if the count is 0.
if (0 == InterlockedDecrement(&m_cRefs))
{
delete this;
}
}
// To do: implement custom MySpecificData implementation.
private:
// Create a private destructor called from DereferenceCacheData.
virtual ~MySpecificData ()
{
}
// 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 |