IHttpUser::D ereferenceUser, méthode
Décrémente le nombre de références internes de l’utilisateur.
Syntaxe
virtual VOID DereferenceUser(
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 méthodes ReferenceUser 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. Ce n’est que lorsque le nombre de références passe à 0 que l’interface IHttpUser
est supprimée du tas. 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 des destructeurs privés ou protégés 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()
{
}
//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 |