Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Diminui a contagem de referência interna do usuário.
Sintaxe
virtual VOID DereferenceUser(
VOID
) = 0;
Parâmetros
Este método não aceita parâmetros.
Acesso thread-safe
As classes que implementam a interface IHttpUser são thread-safe para os métodos ReferenceUser e DereferenceUser .
Comentários
As classes que implementam a IHttpUser interface usam a contagem de referência que é thread-safe para gerenciamento de memória. Quando um IHttpUser ponteiro é construído, a contagem de referência interna (uma private variável de membro) é definida como 1. Quando o ReferenceUser método é chamado, essa contagem de referência é incrementada em 1. Quando o DereferenceUser método é chamado, essa mesma contagem de referência é decrementada em 1. Somente quando a contagem de referência vai para 0 é a IHttpUser interface removida do heap. Esse esquema garante que o IHttpUser ponteiro não será excluído até que o último cliente desse ponteiro chame o DereferenceUser método .
Notas para implementadores
As implementações do ReferenceUser método e DereferenceUser devem ser thread-safe para um IHttpUser ponteiro. Os implementadores devem fornecer apenas destruidores privados ou protegidos que são chamados somente quando a contagem de referência vai para 0.
Observações para chamadores
Os clientes nunca devem tentar converter uma IHttpUser interface em uma classe mais específica e, em seguida, chamar delete diretamente; em vez disso, os clientes devem chamar o ReferenceUser método exatamente uma vez quando um ponteiro para uma IHttpUser interface é recuperado e, em seguida, chamar o DereferenceUser método quando a IHttpUser interface não será mais acessada. Você deve chamar os métodos e DereferenceUser o ReferenceUser mais cedo e o mais tarde possível, respectivamente, para garantir que um IHttpUser ponteiro será válido no heap quando for acessado e excluído quando não for mais necessário.
Exemplo
O exemplo de código a seguir demonstra uma classe chamada MyHttpUser que implementa a IHttpUser interface .
// 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;
}
Requisitos
| Tipo | Descrição |
|---|---|
| Cliente | – IIS 7.0 no Windows Vista – IIS 7.5 no Windows 7 – IIS 8.0 no Windows 8 – IIS 10.0 no Windows 10 |
| Servidor | – IIS 7.0 no Windows Server 2008 – IIS 7.5 no Windows Server 2008 R2 – IIS 8.0 no Windows Server 2012 – IIS 8.5 no Windows Server 2012 R2 – IIS 10.0 no Windows Server 2016 |
| Produto | - 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 |
| parâmetro | Httpserv.h |