Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Reprezentuje zagnieżdżanie alokatorów.
Składnia
template <class Outer, class... Inner>
class scoped_allocator_adaptor;
Uwagi
Szablon klasy hermetyzuje gniazdo co najmniej jednego alokatora. Każda taka klasa ma najbardziej zewnętrzną alokator typu outer_allocator_type
, synonim dla Outer
, który jest publiczną bazą scoped_allocator_adaptor
obiektu. Outer
służy do przydzielania pamięci do użycia przez kontener. Odwołanie do tego obiektu podstawowego alokatora można uzyskać, wywołując polecenie outer_allocator
.
Pozostała część zagnieżdżenia ma typ inner_allocator_type
. Alokator wewnętrzny służy do przydzielania pamięci dla elementów w kontenerze. Odwołanie do przechowywanego obiektu tego typu można uzyskać, wywołując polecenie inner_allocator
. Jeśli Inner...
nie jest pusty, inner_allocator_type
ma typ scoped_allocator_adaptor<Inner...>
i inner_allocator
wyznacza obiekt członkowski. inner_allocator_type
W przeciwnym razie ma typ scoped_allocator_adaptor<Outer>
i inner_allocator
wyznacza cały obiekt.
Zagnieżdżanie zachowuje się tak, jakby ma dowolną głębokość, replikując jego najbardziej hermetyzowany alokator zgodnie z potrzebami.
Kilka pojęć, które nie są częścią widocznego interfejsu pomocy w opisywaniu zachowania tego szablonu klasy. Najbardziej zewnętrzna alokator pośredniczy we wszystkich wywołaniach konstrukcji i zniszczenia metod. Jest ona skutecznie definiowana przez funkcję OUTERMOST(X)
rekursywną , gdzie OUTERMOST(X)
jest jedną z następujących funkcji.
Jeśli
X.outer_allocator()
jest poprawnie sformułowany, toOUTERMOST(X)
jest .OUTERMOST(X.outer_allocator())
OUTERMOST(X)
W przeciwnym razie wartość toX
.
Trzy typy są definiowane ze względu na ekspozycję:
Type | Opis |
---|---|
Outermost |
Typ .OUTERMOST(*this) |
Outermost_traits |
allocator_traits<Outermost> |
Outer_traits |
allocator_traits<Outer> |
Konstruktory
Nazwa/nazwisko | opis |
---|---|
scoped_allocator_adaptor | scoped_allocator_adaptor Tworzy obiekt. |
Typedefs
Nazwa/nazwisko | opis |
---|---|
const_pointer |
Ten typ jest synonimem const_pointer skojarzonym z alokatorem Outer . |
const_void_pointer |
Ten typ jest synonimem const_void_pointer skojarzonym z alokatorem Outer . |
difference_type |
Ten typ jest synonimem difference_type skojarzonym z alokatorem Outer . |
inner_allocator_type |
Ten typ jest synonimem typu zagnieżdżonego adaptera scoped_allocator_adaptor<Inner...> . |
outer_allocator_type |
Ten typ jest synonimem typu alokatora Outer podstawowego. |
pointer |
Ten typ jest synonimem pointer skojarzonym z alokatorem Outer . |
propagate_on_container_copy_assignment |
Typ ma wartość true tylko wtedy, gdy Outer_traits::propagate_on_container_copy_assignment zawiera wartość true lub inner_allocator_type::propagate_on_container_copy_assignment ma wartość true. |
propagate_on_container_move_assignment |
Typ ma wartość true tylko wtedy, gdy Outer_traits::propagate_on_container_move_assignment zawiera wartość true lub inner_allocator_type::propagate_on_container_move_assignment ma wartość true. |
propagate_on_container_swap |
Typ ma wartość true tylko wtedy, gdy Outer_traits::propagate_on_container_swap zawiera wartość true lub inner_allocator_type::propagate_on_container_swap ma wartość true. |
size_type |
Ten typ jest synonimem size_type skojarzonym z alokatorem Outer . |
value_type |
Ten typ jest synonimem value_type skojarzonym z alokatorem Outer . |
void_pointer |
Ten typ jest synonimem void_pointer skojarzonym z alokatorem Outer . |
Struktury
Nazwa/nazwisko | opis |
---|---|
scoped_allocator_adaptor::rebind, struktura | Definiuje typ Outer::rebind\<Other>::other jako synonim dla elementu scoped_allocator_adaptor\<Other, Inner...> . |
Metody
Nazwa/nazwisko | opis |
---|---|
allocate | Przydziela pamięć przy użyciu alokatora Outer . |
konstruować | Tworzy obiekt. |
Deallocate | Cofa przydział obiektów przy użyciu alokatora zewnętrznego. |
niszczyć | Niszczy określony obiekt. |
inner_allocator | Pobiera odwołanie do przechowywanego obiektu typu inner_allocator_type . |
max_size | Określa maksymalną liczbę obiektów, które można przydzielić przez alokator zewnętrzny. |
outer_allocator | Pobiera odwołanie do przechowywanego obiektu typu outer_allocator_type . |
select_on_container_copy_construction | Tworzy nowy scoped_allocator_adaptor obiekt z każdym przechowywanym obiektem alokatora zainicjowanym przez wywołanie select_on_container_copy_construction każdego odpowiedniego alokatora. |
Operatory
Operator | opis |
---|---|
operator = | |
operator== | |
operator!= |
Wymagania
Nagłówek:<scoped_allocator>
Przestrzeń nazw: std
scoped_allocator_adaptor::przydziel
Przydziela pamięć przy użyciu alokatora Outer
.
pointer allocate(size_type count);pointer allocate(size_type count, const_void_pointer hint);
Parametry
count
Liczba elementów, dla których należy przydzielić wystarczającą ilość miejsca do magazynowania.
aluzja
Wskaźnik, który może pomóc obiektowi alokatora, lokalizując adres obiektu przydzielonego przed żądaniem.
Wartość zwracana
Pierwsza funkcja składowa zwraca wartość Outer_traits::allocate(outer_allocator(), count)
. Druga funkcja składowa zwraca wartość Outer_traits::allocate(outer_allocator(), count, hint)
.
scoped_allocator_adaptor::construct
Tworzy obiekt.
template <class Ty, class... Atypes>
void construct(Ty* ptr, Atypes&&... args);
template <class Ty1, class Ty2, class... Atypes1, class... Atypes2>
void construct(pair<Ty1, Ty2>* ptr, piecewise_construct_t,
tuple<Atypes1&&...>
first, tuple<Atypes1&&...> second);
template <class Ty1, class Ty2>
void construct(pair<Ty1, Ty2>* ptr);
template <class Ty1, class Ty2, class Uy1, class Uy2>
void construct(pair<Ty1, Ty2>* ptr,
class Uy1&& first, class Uy2&& second);
template <class Ty1, class Ty2, class Uy1, class Uy2>
void construct(pair<Ty1, Ty2>* ptr, const pair<Uy1, Uy2>& right);
template <class Ty1, class Ty2, class Uy1, class Uy2>
void construct(pair<Ty1, Ty2>* ptr, pair<Uy1, Uy2>&& right);
Parametry
ptr
Wskaźnik do lokalizacji pamięci, w której ma zostać skonstruowany obiekt.
args
Lista argumentów.
pierwszy
Obiekt pierwszego typu w parze.
sekunda
Obiekt drugiego typu w parze.
Prawy
Istniejący obiekt do przeniesienia lub skopiowania.
Uwagi
Pierwsza metoda konstruuje obiekt pod adresem ptr , wywołując Outermost_traits::construct(OUTERMOST(*this), ptr, xargs...)
metodę , gdzie xargs...
jest jedną z następujących metod.
Jeśli
uses_allocator<Ty, inner_allocator_type>
wartość false jest przechowywana, jestxargs...
toargs...
.Jeśli
uses_allocator<Ty, inner_allocator_type>
ma wartość true iis_constructible<Ty, allocator_arg_t, inner_allocator_type, args...>
ma wartość true, wartośćxargs...
toallocator_arg, inner_allocator(), args...
.Jeśli
uses_allocator<Ty, inner_allocator_type>
ma wartość true iis_constructible<Ty, args..., inner_allocator()>
ma wartość true, wartośćxargs...
toargs..., inner_allocator()
.
Druga metoda konstruuje obiekt pary w ptr przez wywołanie Outermost_traits::construct(OUTERMOST(*this), &ptr->first, xargs...)
metody , gdzie xargs...
jest first...
modyfikowany tak, jak na powyższej liście, i Outermost_traits::construct(OUTERMOST(*this), &ptr->second, xargs...)
, gdzie xargs...
jest second...
modyfikowany, jak na powyższej liście.
Trzecia metoda zachowuje się tak samo jak this->construct(ptr, piecewise_construct, tuple<>, tuple<>)
.
Czwarta metoda zachowuje się tak samo jak this->construct(ptr, piecewise_construct, forward_as_tuple(std::forward<Uy1>(first), forward_as_tuple(std::forward<Uy2>(second))
.
Piąta metoda zachowuje się tak samo jak this->construct(ptr, piecewise_construct, forward_as_tuple(right.first), forward_as_tuple(right.second))
.
Szósta metoda zachowuje się tak samo jak this->construct(ptr, piecewise_construct, forward_as_tuple(std::forward<Uy1>(right.first), forward_as_tuple(std::forward<Uy2>(right.second))
.
scoped_allocator_adaptor::d eallocate
Cofa przydział obiektów przy użyciu alokatora zewnętrznego.
void deallocate(pointer ptr, size_type count);
Parametry
ptr
Wskaźnik do lokalizacji początkowej obiektów do cofnięcia przydziału.
count
Liczba obiektów do cofnięcia przydziału.
scoped_allocator_adaptor::d estroy
Niszczy określony obiekt.
template <class Ty>
void destroy(Ty* ptr)
Parametry
ptr
Wskaźnik do obiektu, który ma zostać zniszczony.
Wartość zwracana
Outermost_traits::destroy(OUTERMOST(*this), ptr)
scoped_allocator_adaptor::inner_allocator
Pobiera odwołanie do przechowywanego obiektu typu inner_allocator_type
.
inner_allocator_type& inner_allocator() noexcept;
const inner_allocator_type& inner_allocator() const noexcept;
Wartość zwracana
Odwołanie do przechowywanego obiektu typu inner_allocator_type
.
scoped_allocator_adaptor::max_size
Określa maksymalną liczbę obiektów, które można przydzielić przez alokator zewnętrzny.
size_type max_size();
Wartość zwracana
Outer_traits::max_size(outer_allocator())
scoped_allocator_adaptor::operator=
scoped_allocator_adaptor& operator=(const scoped_allocator_adaptor&) = default;
scoped_allocator_adaptor& operator=(scoped_allocator_adaptor&&) = default;
scoped_allocator_adaptor::operator==
template <class OuterA1, class OuterA2, class... InnerAllocs>
bool operator==(const scoped_allocator_adaptor<OuterA1, InnerAllocs...>& a,
const scoped_allocator_adaptor<OuterA2, InnerAllocs...>& b) noexcept;
scoped_allocator_adaptor::operator!=
template <class OuterA1, class OuterA2, class... InnerAllocs>
bool operator!=(const scoped_allocator_adaptor<OuterA1, InnerAllocs...>& a,
const scoped_allocator_adaptor<OuterA2, InnerAllocs...>& b) noexcept;
scoped_allocator_adaptor::outer_allocator
Pobiera odwołanie do przechowywanego obiektu typu outer_allocator_type
.
outer_allocator_type& outer_allocator() noexcept;
const outer_allocator_type& outer_allocator() const noexcept;
Wartość zwracana
Odwołanie do przechowywanego obiektu typu outer_allocator_type
.
scoped_allocator_adaptor::rebind, struktura
Definiuje typ Outer::rebind\<Other>::other
jako synonim dla elementu scoped_allocator_adaptor\<Other, Inner...>
.
struktura rebind{ typedef Other_traits::rebind<Other> Other_alloc; typedef scoped_allocator_adaptor Other_alloc<, Inner...> other; };
konstruktor scoped_allocator_adaptor::scoped_allocator_adaptor
scoped_allocator_adaptor
Tworzy obiekt. Zawiera również destruktor.
scoped_allocator_adaptor();
scoped_allocator_adaptor(const scoped_allocator_adaptor& right) noexcept;
template <class Outer2>
scoped_allocator_adaptor(
const scoped_allocator_adaptor<Outer2, Inner...>& right) noexcept;
template <class Outer2>
scoped_allocator_adaptor(
scoped_allocator_adaptor<Outer2, Inner...>&& right) noexcept;
template <class Outer2>
scoped_allocator_adaptor(Outer2&& al,
const Inner&... rest) noexcept;
~scoped_allocator_adaptor();
Parametry
Prawy
Istniejący scoped_allocator_adaptor
element .
Al
Istniejący alokator do użycia jako alokator zewnętrzny.
odpoczynek
Lista alokatorów, które mają być używane jako alokatory wewnętrzne.
Uwagi
Pierwszy konstruktor domyślny konstruuje przechowywane obiekty alokatora. Każdy z następnych trzech konstruktorów konstruuje przechowywane obiekty alokatora z odpowiednich obiektów po prawej stronie. Ostatni konstruktor konstruuje przechowywane obiekty alokatora z odpowiednich argumentów na liście argumentów.
scoped_allocator_adaptor::select_on_container_copy_construction
Tworzy nowy scoped_allocator_adaptor
obiekt z każdym przechowywanym obiektem alokatora zainicjowanym przez wywołanie select_on_container_copy_construction
każdego odpowiedniego alokatora.
scoped_allocator_adaptor select_on_container_copy_construction();
Wartość zwracana
Ta metoda skutecznie zwraca wartość scoped_allocator_adaptor(Outer_traits::select_on_container_copy_construction(*this), inner_allocator().select_on_container_copy_construction())
. Wynik jest nowym scoped_allocator_adaptor
obiektem z każdym przechowywanym obiektem alokatora zainicjowanym przez wywołanie al.select_on_container_copy_construction()
odpowiedniego alokatora al.