AllocatorOwn::AllocatorOwn: различия между версиями

Материал из CAMaaS preliminary wiki
Перейти к навигации Перейти к поиску
 
Строка 10: Строка 10:
|{{AllocatorOwn::AllocatorOwn brief}}
|{{AllocatorOwn::AllocatorOwn brief}}
# Конструктор по умолчанию, инициализирующий создаваемый экземпляр адаптера нулевым адресом.
# Конструктор по умолчанию, инициализирующий создаваемый экземпляр адаптера нулевым адресом.
# Явный конструктор, инициализирующий создаваемый экземпляр адаптера адресом реализации аллокатора.
# Явный конструктор, инициализирующий создаваемый экземпляр адаптера адресом реализации менеджера памяти.
# Конструктор, выполняющий инициализацию адаптера с перемещением адаптируемой реализации интерфейса. Адаптер {{param|right}} в результате операции теряет владение реализацией аллокатора, как если бы был выполнен вызов <source lang="cpp" inline>right.release_ownership()</source> с присваиванием возвращенного адреса создаваемому адаптеру.
# Конструктор, выполняющий инициализацию адаптера с перемещением адаптируемой реализации интерфейса. Адаптер {{param|right}} в результате операции теряет владение реализацией менеджера памяти, как если бы был выполнен вызов <source lang="cpp" inline>right.release_ownership()</source> с присваиванием возвращенного адреса создаваемому адаптеру.
# Явный конструктор, создающий адаптер с адресом реализации интерфейса, полученным из [[ссылочный адаптер|ссылочного адаптера]] {{param|refRight}} путем вызова <source lang="cpp" inline>refRight.get_interface()->Clone()</source> с неявным приведением результата к типу <source lang="cpp" inline>IAllocator*</source>. Данный конструктор участвует в разрешении перегрузки, только если подтип <source lang="cpp" inline>AnotherAdapterRef::interface_type</source> существует и поддерживает метод <source lang="cpp" inline>AnotherAdapterRef::interface_type::Clone()</source>, указатель <source lang="cpp" inline>AnotherAdapterRef::interface_type*</source> приводим неявно к типу <source lang="cpp" inline>IAllocator*</source>, а сам тип {{param|AnotherAdapterRef}} является [[ссылочный адаптер|ссылочным адаптером]].
# Явный конструктор, создающий адаптер с адресом реализации интерфейса, полученным из [[ссылочный адаптер|ссылочного адаптера]] {{param|refRight}} путем вызова <source lang="cpp" inline>refRight.get_interface()->Clone()</source> с неявным приведением результата к типу <source lang="cpp" inline>IAllocator*</source>. Данный конструктор участвует в разрешении перегрузки, только если подтип <source lang="cpp" inline>AnotherAdapterRef::interface_type</source> существует и поддерживает метод <source lang="cpp" inline>AnotherAdapterRef::interface_type::Clone()</source>, указатель <source lang="cpp" inline>AnotherAdapterRef::interface_type*</source> приводим неявно к типу <source lang="cpp" inline>IAllocator*</source>, а сам тип {{param|AnotherAdapterRef}} является [[ссылочный адаптер|ссылочным адаптером]].
# Конструктор, создающий экземпляр адаптера на основе заданного параметрически владеющего адаптера путем клонирования интерфейса (то есть вызова метода <source lang="cpp" inline>ownRight.get_interface()->Clone()</source>). Данный конструктор участвует в разрешении перегрузки, только если подтип <source lang="cpp" inline>AnotherAdapterOwn::interface_type</source> существует и поддерживает метод <source lang="cpp" inline>AnotherAdapterOwn::interface_type::Clone()</source>, указатель <source lang="cpp" inline>AnotherAdapterOwn::interface_type*</source> приводим неявно к типу <source lang="cpp" inline>IAllocator*</source>, а сам тип {{param|AnotherAdapterOwn}} является [[владеющий адаптер|адаптером с владением]].
# Конструктор, создающий экземпляр адаптера на основе заданного параметрически владеющего адаптера путем клонирования интерфейса (то есть вызова метода <source lang="cpp" inline>ownRight.get_interface()->Clone()</source>). Данный конструктор участвует в разрешении перегрузки, только если подтип <source lang="cpp" inline>AnotherAdapterOwn::interface_type</source> существует и поддерживает метод <source lang="cpp" inline>AnotherAdapterOwn::interface_type::Clone()</source>, указатель <source lang="cpp" inline>AnotherAdapterOwn::interface_type*</source> приводим неявно к типу <source lang="cpp" inline>IAllocator*</source>, а сам тип {{param|AnotherAdapterOwn}} является [[владеющий адаптер|адаптером с владением]].
Строка 20: Строка 20:
{{function template paramlist end}}
{{function template paramlist end}}
{{function_paramlist begin}}
{{function_paramlist begin}}
{{function_paramlist add|pAllocator|Указатель на адаптируемую реализацию аллокатора [[IAllocator]].|paramdir=[in]}}
{{function_paramlist add|pAllocator|Указатель на адаптируемую реализацию менеджера памяти [[IAllocator]].|paramdir=[in]}}
{{function_paramlist add|right|Адаптер, передающий владение своим интерфейсным указателем, если он есть, создаваемому экземпляру [[AllocatorOwn]], как если бы был выполнен вызов <source lang="cpp" inline>right.release_ownership()</source>.}}
{{function_paramlist add|right|Адаптер, передающий владение своим интерфейсным указателем, если он есть, создаваемому экземпляру [[AllocatorOwn]], как если бы был выполнен вызов <source lang="cpp" inline>right.release_ownership()</source>.}}
{{function_paramlist add|refRight|[[Ссылочный адаптер]], реализация интерфейса которого клонируется с целью создания копии, управляемой создаваемым адаптером, как если бы было выполнено создание адаптера путем вызова перегрузки 2 с аргументом <tt>pCopy</tt>, получаемым в результате вызова <source lang="cpp" inline>refRight.get_interface()->Clone(&pCopy)</source>.}}
{{function_paramlist add|refRight|[[Ссылочный адаптер]], реализация интерфейса которого клонируется с целью создания копии, управляемой создаваемым адаптером, как если бы было выполнено создание адаптера путем вызова перегрузки 2 с аргументом <tt>pCopy</tt>, получаемым в результате вызова <source lang="cpp" inline>refRight.get_interface()->Clone(&pCopy)</source>.}}

Текущая версия на 16:49, 18 августа 2019

AllocatorOwn() noexcept; //1
explicit AllocatorOwn(IAllocator* pAllocator) noexcept; //2
AllocatorOwn(AllocatorOwn&& right) noexcept; //3
template <class AnotherAdapterRef>
explicit AllocatorOwn(const AnotherAdapterRef& refRight) noexcept; //4
template <class AnotherAdapterOwn>
AllocatorOwn(const AnotherAdapterOwn& ownRight) noexcept; //5
template <class AnotherAdapterOwn>
AllocatorOwn(AnotherAdapterOwn&& ownRight) noexcept; //6

Конструкторы адаптера с владением.

  1. Конструктор по умолчанию, инициализирующий создаваемый экземпляр адаптера нулевым адресом.
  2. Явный конструктор, инициализирующий создаваемый экземпляр адаптера адресом реализации менеджера памяти.
  3. Конструктор, выполняющий инициализацию адаптера с перемещением адаптируемой реализации интерфейса. Адаптер right в результате операции теряет владение реализацией менеджера памяти, как если бы был выполнен вызов right.release_ownership() с присваиванием возвращенного адреса создаваемому адаптеру.
  4. Явный конструктор, создающий адаптер с адресом реализации интерфейса, полученным из ссылочного адаптера refRight путем вызова refRight.get_interface()->Clone() с неявным приведением результата к типу IAllocator*. Данный конструктор участвует в разрешении перегрузки, только если подтип AnotherAdapterRef::interface_type существует и поддерживает метод AnotherAdapterRef::interface_type::Clone(), указатель AnotherAdapterRef::interface_type* приводим неявно к типу IAllocator*, а сам тип AnotherAdapterRef является ссылочным адаптером.
  5. Конструктор, создающий экземпляр адаптера на основе заданного параметрически владеющего адаптера путем клонирования интерфейса (то есть вызова метода ownRight.get_interface()->Clone()). Данный конструктор участвует в разрешении перегрузки, только если подтип AnotherAdapterOwn::interface_type существует и поддерживает метод AnotherAdapterOwn::interface_type::Clone(), указатель AnotherAdapterOwn::interface_type* приводим неявно к типу IAllocator*, а сам тип AnotherAdapterOwn является адаптером с владением.
  6. Конструктор, создающий экземпляр адаптера путем переноса адреса реализации интерфейса AnotherAdapterOwn::interface_type с приведением его к типу IAllocator*. В результате вызова адаптер ownRight теряет владение своим экземпляром реализации интерфейса AnotherAdapterOwn::interface_type и инициализируется нулевым адресом, как если бы был выполнен вызов ownRight.release_ownership().
Параметры шаблона
AnotherAdapterRefТип ссылочного адаптера, участвующего в качестве параметра refRight в конструкторе 4. Значение std::is_convertible_v<typename AnotherAdapterRef::interface_type*, IAllocator*> должно быть true, адаптер - ссылочным, а интерфейс AnotherAdapterRef::interface_type должен поддерживать вызов pI->Clone(&pCopy), где pI - указатель оригинальную реализацию интерфейса AnotherAdapterRef::interface_type, pCopy - указатель, на выходе функции Clone принимающий адрес копии оригинальной реализации.
AnotherAdapterOwnТип адаптера с владением, участвующего в качестве параметра ownRight в конструкторах 5 и 6. Значение std::is_convertible_v<typename AnotherAdapterOwn::interface_type*, IAllocator*> должно быть true, адаптер - владеющим. Для копирования перегрузкой 5 интерфейс AnotherAdapterOwn::interface_type также должен поддерживать вызов pI->Clone(&pCopy), где pI - указатель оригинальную реализацию интерфейса AnotherAdapterRef::interface_type, pCopy - указатель, на выходе функции Clone принимающий адрес копии оригинальной реализации.
Параметры
[in]pAllocatorУказатель на адаптируемую реализацию менеджера памяти IAllocator.
rightАдаптер, передающий владение своим интерфейсным указателем, если он есть, создаваемому экземпляру AllocatorOwn, как если бы был выполнен вызов right.release_ownership().
refRightСсылочный адаптер, реализация интерфейса которого клонируется с целью создания копии, управляемой создаваемым адаптером, как если бы было выполнено создание адаптера путем вызова перегрузки 2 с аргументом pCopy, получаемым в результате вызова refRight.get_interface()->Clone(&pCopy).
ownRightВладеющий адаптер, реализация интерфейса которого клонируется или переносится на создаваемый адаптер. Копирование выполняется перегрузкой 5, как если бы было выполнено создание адаптера путем вызова перегрузки 2 с аргументом pCopy, получаемым в результате вызова ownRight.get_interface()->Clone(&pCopy). Перемещение выполняется перегрузкой 6, как если бы было выполнено создание адаптера путем вызова перегрузки 2 с аргументом ownRight.release_ownership().