Метод 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
интерфейс, а затем вызывать DereferenceUser
метод, когда IHttpUser
доступ к интерфейсу больше не будет. Методы и DereferenceUser
следует вызывать ReferenceUser
как можно раньше и как можно позже, соответственно, чтобы гарантировать, что 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;
}
Требования
Тип | Описание |
---|---|
клиент | — IIS 7.0 в Windows Vista — IIS 7.5 в Windows 7 — IIS 8.0 в Windows 8 — IIS 10.0 в Windows 10 |
Сервер | — IIS 7.0 в Windows Server 2008 — IIS 7.5 в Windows Server 2008 R2 — IIS 8.0 в Windows Server 2012 — IIS 8.5 в Windows Server 2012 R2 — IIS 10.0 в Windows Server 2016 |
Продукт | — 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 |
Заголовок | Httpserv.h |