IHttpUser::ReferenceUser-Methode

Erhöht die anzahl der internen Verweise des Benutzers.

Syntax

virtual VOID ReferenceUser(  
   VOID  
) = 0;  

Parameter

Diese Methode nimmt zwei Parameter entgegen.

Threadsicherheit

Klassen, die die IHttpUser-Schnittstelle implementieren, sind threadsicher für die ReferenceUserMethoden Und DereferenceUser .

Bemerkungen

Klassen, die die IHttpUser Schnittstelle implementieren, verwenden die Verweiszählung, die threadsicher für die Speicherverwaltung ist. Wenn ein IHttpUser Zeiger erstellt wird, wird die interne Verweisanzahl (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 verringert. Die IHttpUser Schnittstelle wird nur aus dem Heap entfernt, wenn die Verweisanzahl auf 0 geht. 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 Methodenimplementierungen und DereferenceUser sollten threadsicher für einen IHttpUser Zeiger sein. Implementierer sollten nur private oder protected 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 umzustellen und dann direkt aufzurufen 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()  
    {  
  
    }  
  
    // Create a 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 unter 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 unter 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