Compartir a través de


IDispensedHttpModuleContextContainer::ReleaseContainer (Método)

Elimina el contenedor de contexto si se dispensa.

Sintaxis

virtual VOID ReleaseContainer(  
   VOID  
) = 0;  

Parámetros

Este método no toma parámetros.

Seguridad para subprocesos

El ReleaseContainer método no es seguro para subprocesos para los implementadores que se dispensan.

Comentarios

El comportamiento de este método depende de la implementación. Debe usar la siguiente información como guía, pero es posible que no sea correcta en todos los escenarios:

  • La mayoría de los implementadores declaran un valor privado Boolean denominado dispensed; el valor predeterminado es false y el comportamiento predeterminado es que dispensed nunca se establece en true. Sin embargo, si la implementación se ha establecido dispensedtrueen , cuando ReleaseContainer se llama a , el puntero IDispensedHttpModuleContextContainer llama delete a en sí mismo. De lo contrario, ReleaseContainer es una operación vacía.

  • Si delete se llama a , IDispensedHttpModuleContextContainer enumera su matriz interna de punteros IHttpStoredContext y llama al método IHttpStoredContext::CleanupStoredContext en los punteros que se agregaron anteriormente mediante el método IHttpModuleContextContainer::SetModuleContext . A continuación, el contenedor de contexto elimina la memoria de la matriz en el montón y establece esa matriz en NULL.

Ejemplo

En el ejemplo siguiente se muestra una clase personalizada denominada MyContainer que implementa la IDispensedHttpModuleContextContainer interfaz . También muestra una clase personalizada denominada MyClass que implementa un método denominado GetModuleContextContainer. MyClass administra un MyContainer puntero durante la vigencia de un MyClass puntero.

// The MyContainer class implements the   
// IDispensedHttpModuleContextContainer interface.  
class MyContainer : public IDispensedHttpModuleContextContainer  
{  
public:  
    // The MyContainer method is the public  
    // constructor for the MyContainer class.  
    // Make this method protected if the   
    // MyContainer class is abstract.  
    // dispensed: true if the container should  
    // call delete this when the ReleaseContainer  
    // method is called.  
    MyContainer(bool dispensed = false)   
        : m_dispensed(dispensed)  
    {  
  
    }  
  
    // The ReleaseContainer method   
    // calls delete this if this container  
    // is dispensed.  
    virtual VOID ReleaseContainer(VOID)  
    {  
        if (m_dispensed)  
        {  
            delete this;  
        }  
    }  
  
    // Implement additional   
    // IDispensedHttpModuleContextContainer  
    // pure virtual methods if this class  
    // is not abstract.  
  
private:  
    // The MyContainer method is the private  
    // destructor for the MyContainer class.  
    // Make this method protected and virtual   
    // if the MyContainer class expects   
    // to be a class of derivation. This method   
    // should not be public because   
    // IDispensedHttpModuleContextContainer pointers  
    // should be disposed externally only by   
    // calling the ReleaseContainer method.  
    ~MyContainer()  
    {  
  
    }  
  
    // Specify a Boolean value for dispensing.  
    bool m_dispensed;  
};  
  
// Create the MyClass class.  
class MyClass  
{  
public:  
    // The MyClass method is the public  
    // constructor for the MyClass class.  
    MyClass()  
    {  
        m_container = new MyContainer;  
    }  
  
    // The MyClass method is the   
    // public virtual destructor   
    // for the MyClass class. This destructor  
    // calls ReleaseContainer on the internal  
    // IDispensedHttpModuleContextContainer  
    // pointer and sets that pointer to NULL.  
    virtual ~MyClass()  
    {  
        m_container->ReleaseContainer();  
        m_container = NULL;  
    }  
  
    // The GetModuleContextContainer method  
    // returns an IHttpModuleContextContainer  
    // pointer.  
    // return: a static upcast   
    // IDispensedHttpModuleContextContainer.  
    virtual IHttpModuleContextContainer*   
        GetModuleContextContainer(VOID)  
    {  
        return static_cast<IHttpModuleContextContainer*>  
            (m_container);  
    }  
  
    // Implement additional IHttpUrlInfo  
    // pure virtual methods if this class  
    // is not abstract.  
  
private:  
    // Specify a private  
    // IDispensedHttpModuleContextContainer  
    // pointer.  
    IDispensedHttpModuleContextContainer* m_container;  
};  

Requisitos

Tipo Descripción
Remoto - IIS 7.0 en Windows Vista
- IIS 7.5 en Windows 7
- IIS 8.0 en Windows 8
- IIS 10.0 en Windows 10
Servidor - IIS 7.0 en Windows Server 2008
- IIS 7.5 en Windows Server 2008 R2
- IIS 8.0 en Windows Server 2012
- IIS 8.5 en Windows Server 2012 R2
- IIS 10.0 en Windows Server 2016
Producto - 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
Encabezado Httpserv.h

Consulte también

IDispensedHttpModuleContextContainer (Interfaz)
IHttpApplication::GetModuleContextContainer (Método)
IHttpConnection::GetModuleContextContainer (Método)
IHttpContext::GetModuleContextContainer (Método)
IHttpFileInfo::GetModuleContextContainer (Método)
IHttpModuleContextContainer (Interfaz)
IHttpSite::GetModuleContextContainer (Método)
IHttpUrlInfo::GetModuleContextContainer (Método)
IMetadataInfo::GetModuleContextContainer (Método)