Метод IDispensedHttpModuleContextContainer::ReleaseContainer
Удаляет контейнер контекста, если он раздается.
Синтаксис
virtual VOID ReleaseContainer(
VOID
) = 0;
Параметры
Этот метод не принимает параметров.
Потокобезопасность
Метод ReleaseContainer
не является потокобезопасном для разработчиков, которые распределяются.
Комментарии
Поведение этого метода зависит от реализации. В качестве руководства следует использовать следующие сведения, но они могут быть неправильными во всех сценариях:
Большинство разработчиков объявляют закрытое
Boolean
значение с именемdispensed
; значение по умолчанию —false
, а поведение по умолчанию —dispensed
никогда не задано значениеtrue
. Однако если для реализации задано значениеdispensed
true
, приReleaseContainer
вызове вызывается указатель IDispensedHttpModuleContextContainerdelete
.ReleaseContainer
В противном случае — пустая операция.Если
delete
вызывается ,IDispensedHttpModuleContextContainer
перечисляет внутренний массив указателей IHttpStoredContext и вызывает метод IHttpStoredContext::CleanupStoredContext для всех указателей, добавленных ранее с помощью метода IHttpModuleContextContainer::SetModuleContext . Затем контейнер контекста удаляет память массива в куче и задает для этого массива значение NULL.
Пример
В следующем примере показан пользовательский класс с именем MyContainer
, реализующий IDispensedHttpModuleContextContainer
интерфейс . Здесь также показан пользовательский класс с именем MyClass
, реализующий метод с именем GetModuleContextContainer
. MyClass
управляет указателем MyContainer
в течение времени существования указателя MyClass
.
// 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;
};
Требования
Тип | Описание |
---|---|
клиент | — IIS 7.0 в Windows Vista — IIS 7.5 в Windows 7 — IIS 8.0 в Windows 8 — IIS 10.0 в Windows 10 |
Сервер | — IIS 7.0 в Windows Server 2008 — IIS 7.5 в Windows Server 2008 R2 — IIS 8.0 в Windows Server 2012 — IIS 8.5 в Windows Server 2012 R2 — IIS 10.0 в Windows Server 2016 |
Продукт | — 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 |
Заголовок | Httpserv.h |
См. также:
Интерфейс IDispensedHttpModuleContextContainer
Метод IHttpApplication::GetModuleContextContainer
Метод IHttpConnection::GetModuleContextContainer
Метод IHttpContext::GetModuleContextContainer
Метод IHttpFileInfo::GetModuleContextContainer
Интерфейс IHttpModuleContextContainer
Метод IHttpSite::GetModuleContextContainer
Метод IHttpUrlInfo::GetModuleContextContainer
Метод IMetadataInfo::GetModuleContextContainer