Condividi tramite


Metodo IHttpUser::ReferenceUser

Incrementa il conteggio dei riferimenti interni dell'utente.

Sintassi

virtual VOID ReferenceUser(  
   VOID  
) = 0;  

Parametri

Questo metodo non accetta parametri.

Thread safety

Le classi che implementano l'interfaccia IHttpUser sono thread-safe per i ReferenceUser metodi e DereferenceUser .

Commenti

Le classi che implementano l'interfaccia usano il IHttpUser conteggio dei riferimenti thread-safe per la gestione della memoria. Quando viene costruito un IHttpUser puntatore, il conteggio dei riferimenti interni (una private variabile membro) è impostato su 1. Quando viene chiamato il ReferenceUser metodo , questo conteggio dei riferimenti viene incrementato di 1. Quando viene chiamato il metodo , lo DereferenceUser stesso conteggio dei riferimenti viene decrementato di 1. L'interfaccia IHttpUser viene rimossa dall'heap solo quando il conteggio dei riferimenti passa a 0. Questo schema garantisce che il IHttpUser puntatore non venga eliminato fino all'ultimo client del puntatore che chiama il DereferenceUser metodo .

Note per gli implementatori

Le implementazioni del ReferenceUser metodo e DereferenceUser devono essere thread-safe per un IHttpUser puntatore. Gli implementatori devono fornire solo private o protected distruttori chiamati solo quando il conteggio dei riferimenti passa a 0.

Note per i chiamanti

I client non devono mai tentare di eseguire il cast di un'interfaccia IHttpUser a una classe più specifica e quindi chiamare delete direttamente. I client devono invece chiamare il ReferenceUser metodo esattamente una volta quando viene recuperato un puntatore a un'interfaccia IHttpUser e quindi chiamare il DereferenceUser metodo quando l'interfaccia IHttpUser non sarà più accessibile. È consigliabile chiamare i ReferenceUser metodi e DereferenceUser il più presto possibile, rispettivamente, per garantire che un IHttpUser puntatore sia valido nell'heap quando viene eseguito l'accesso e eliminato quando non è più necessario.

Esempio

Nell'esempio di codice seguente viene illustrata una classe denominata MyHttpUser che implementa l'interfaccia 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()  
    {  
  
    }  
  
    // Create a private reference count member.  
    LONG m_cRefs;  
}  

Requisiti

Tipo Descrizione
Client - IIS 7.0 in Windows Vista
- IIS 7.5 in Windows 7
- IIS 8.0 in Windows 8
- IIS 10.0 in Windows 10
Server - IIS 7.0 in Windows Server 2008
- IIS 7.5 in Windows Server 2008 R2
- IIS 8.0 in Windows Server 2012
- IIS 8.5 in Windows Server 2012 R2
- IIS 10.0 in Windows Server 2016
Prodotto - 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
Intestazione Httpserv.h

Vedere anche

Interfaccia IHttpUser