Compartir a través de


IHttpUser::D ereferenceUser (Método)

Disminuye el recuento de referencias internas del usuario.

Sintaxis

virtual VOID DereferenceUser(  
   VOID  
) = 0;  

Parámetros

Este método no toma parámetros.

Seguridad para subprocesos

Las clases que implementan la interfaz IHttpUser son seguras para subprocesos para los métodos ReferenceUser y DereferenceUser .

Comentarios

Las clases que implementan la IHttpUser interfaz usan el recuento de referencias que es seguro para subprocesos para la administración de memoria. Cuando se construye un IHttpUser puntero, el recuento de referencias internas (una private variable miembro) se establece en 1. Cuando se llama al ReferenceUser método , este recuento de referencias se incrementa en 1. Cuando se llama al DereferenceUser método , este mismo recuento de referencias se reduce en 1. Solo cuando el recuento de referencias va a 0 es la IHttpUser interfaz quitada del montón. Este esquema garantiza que el IHttpUser puntero no se eliminará hasta que el último cliente de ese puntero llame al DereferenceUser método .

Notas para los implementadores

Las implementaciones de ReferenceUser método y DereferenceUser deben ser seguras para subprocesos para un IHttpUser puntero. Los implementadores solo deben proporcionar destructores privados o protegidos a los que se llama solo cuando el recuento de referencias va a 0.

Notas para autores de la llamada

Los clientes nunca deben intentar convertir una IHttpUser interfaz a una clase más específica y, a continuación, llamar delete directamente; en su lugar, los clientes deben llamar al ReferenceUser método exactamente una vez cuando se recupera un puntero a una IHttpUser interfaz y, a continuación, llamar al DereferenceUser método cuando ya no se acceda a la IHttpUser interfaz. Debe llamar a los ReferenceUser métodos y DereferenceUser tan pronto como sea posible, respectivamente, para garantizar que un IHttpUser puntero será válido en el montón cuando se acceda a él y elimine cuando ya no sea necesario.

Ejemplo

En el ejemplo de código siguiente se muestra una clase denominada MyHttpUser que implementa la IHttpUser interfaz .

// 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 Descripción
Remoto - IIS 7.0 en Windows Vista
- IIS 7.5 en Windows 7
- IIS 8.0 en Windows 8
- IIS 10.0 en Windows 10
Servidor - IIS 7.0 en Windows Server 2008
- IIS 7.5 en Windows Server 2008 R2
- IIS 8.0 en Windows Server 2012
- IIS 8.5 en Windows Server 2012 R2
- IIS 10.0 en Windows Server 2016
Producto - 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
Encabezado Httpserv.h

Consulte también

IHttpUser (Interfaz)