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 ReferenceUser
Methoden 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 |