Partager via


IHttpUser::ReferenceUser, méthode

Incrémente le nombre de références internes de l’utilisateur.

Syntaxe

virtual VOID ReferenceUser(  
   VOID  
) = 0;  

Paramètres

Cette méthode ne prend aucun paramètre.

Cohérence de thread

Les classes qui implémentent l’interface IHttpUser sont thread-safe pour les ReferenceUser méthodes et DereferenceUser .

Remarques

Les classes qui implémentent l’interface utilisent le IHttpUser comptage de références qui est thread-safe pour la gestion de la mémoire. Lorsqu’un IHttpUser pointeur est construit, le nombre de références internes (une private variable membre) est défini sur 1. Lorsque la ReferenceUser méthode est appelée, ce nombre de références est incrémenté de 1. Lorsque la DereferenceUser méthode est appelée, ce même nombre de références est décrémenté de 1. L’interface IHttpUser est supprimée du tas uniquement lorsque le nombre de références passe à 0. Ce schéma garantit que le IHttpUser pointeur n’est pas supprimé tant que le dernier client de ce pointeur n’appelle pas la DereferenceUser méthode .

Remarques pour les implémenteurs

Les ReferenceUser implémentations de méthode et DereferenceUser doivent être thread-safe pour un IHttpUser pointeur. Les implémenteurs doivent fournir uniquement private ou protected des destructeurs qui sont appelés uniquement lorsque le nombre de références passe à 0.

Remarques pour les appelants

Les clients ne doivent jamais tenter de convertir une IHttpUser interface en une classe plus spécifique, puis d’appeler delete directement ; les clients doivent appeler la ReferenceUser méthode exactement une fois lorsqu’un pointeur vers une IHttpUser interface est récupéré, puis appeler la DereferenceUser méthode lorsque l’interface IHttpUser ne sera plus accessible. Vous devez appeler les méthodes et DereferenceUser le ReferenceUser plus tôt et le plus tard possible, respectivement, pour garantir qu’un IHttpUser pointeur sera valide sur le tas lorsqu’il sera accessible et supprimé lorsqu’il n’est plus nécessaire.

Exemple

L’exemple de code suivant illustre une classe appelée MyHttpUser qui implémente l’interface 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;  
}  

Spécifications

Type Description
Client - IIS 7.0 sur Windows Vista
- IIS 7.5 sur Windows 7
- IIS 8.0 sur Windows 8
- IIS 10.0 sur Windows 10
Serveur - IIS 7.0 sur Windows Server 2008
- IIS 7.5 sur Windows Server 2008 R2
- IIS 8.0 sur Windows Server 2012
- IIS 8.5 sur Windows Server 2012 R2
- IIS 10.0 sur Windows Server 2016
Produit - 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
En-tête Httpserv.h

Voir aussi

IHttpUser, interface