Compartilhar via


Método IHttpUser::D ereferenceUser

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

Consulte Também

IHttpUser Interface