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 |