Freigeben über


IHttpUser::D ereferenceUser-Methode

Verringert die anzahl der internen Benutzerreferenzen.

Syntax

virtual VOID DereferenceUser(  
   VOID  
) = 0;  

Parameter

Diese Methode nimmt zwei Parameter entgegen.

Threadsicherheit

Klassen, die die IHttpUser-Schnittstelle implementieren, sind threadsicher für die ReferenceUser- und DereferenceUser -Methoden.

Bemerkungen

Klassen, die die IHttpUser Schnittstelle implementieren, verwenden Referenzzählungen, die threadsicher für die Speicherverwaltung sind. Wenn ein IHttpUser Zeiger erstellt wird, wird die interne Referenzanzahl (eine private Membervariable) auf 1 festgelegt. Wenn die ReferenceUser Methode aufgerufen wird, wird diese Verweisanzahl um 1 erhöht. Wenn die DereferenceUser Methode aufgerufen wird, wird dieselbe Verweisanzahl um 1 erhöht. Nur wenn die Verweisanzahl auf 0 geht, wird die IHttpUser Schnittstelle aus dem Heap entfernt. Dieses Schema garantiert, dass der IHttpUser Zeiger erst gelöscht wird, wenn der letzte Client dieses Zeigers die DereferenceUser -Methode aufruft.

Hinweise für Implementierer

Die ReferenceUser Implementierungen und DereferenceUser -Methoden sollten threadsicher für einen IHttpUser Zeiger sein. Implementierer sollten nur private oder geschützte Destruktoren bereitstellen, die nur aufgerufen werden, wenn die Verweisanzahl auf 0 geht.

Hinweise für Aufrufer

Clients sollten niemals versuchen, eine IHttpUser Schnittstelle in eine spezifischere Klasse zu umwandeln und dann direkt aufrufen delete . Clients sollten die ReferenceUser Methode stattdessen genau einmal aufrufen, wenn ein Zeiger auf eine IHttpUser Schnittstelle abgerufen wird, und dann die DereferenceUser -Methode aufrufen, wenn nicht mehr auf die IHttpUser Schnittstelle zugegriffen wird. Sie sollten die ReferenceUser Methoden und DereferenceUser so früh und so spät wie möglich aufrufen, um sicherzustellen, dass ein IHttpUser Zeiger auf dem Heap gültig ist, wenn darauf zugegriffen und gelöscht wird, wenn er nicht mehr benötigt wird.

Beispiel

Im folgenden Codebeispiel wird eine Klasse namens MyHttpUser veranschaulicht, die die IHttpUser Schnittstelle implementiert.

// 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;  
}  

Anforderungen

type BESCHREIBUNG
Client – IIS 7.0 unter Windows Vista
– IIS 7.5 unter Windows 7
– IIS 8.0 unter Windows 8
– IIS 10.0 auf Windows 10
Server – IIS 7.0 unter Windows Server 2008
– IIS 7.5 unter Windows Server 2008 R2
– IIS 8.0 unter Windows Server 2012
– IIS 8.5 unter Windows Server 2012 R2
– IIS 10.0 auf Windows Server 2016
Produkt – 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
Header Httpserv.h

Weitere Informationen

IHttpUser-Schnittstelle