Udostępnij przez


scoped_allocator_adaptor — klasa

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, to OUTERMOST(X) jest .OUTERMOST(X.outer_allocator())

  • OUTERMOST(X) W przeciwnym razie wartość to X.

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 Outerpodstawowego.
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 .
Konstruowania Tworzy obiekt.
Deallocate Cofa przydział obiektów przy użyciu alokatora zewnętrznego.
Zniszczyć 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.

Wskazówka
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.

Pierwszym
Obiekt pierwszego typu w parze.

Drugi
Obiekt drugiego typu w parze.

Prawo
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, jest xargs... to args....

  • Jeśli uses_allocator<Ty, inner_allocator_type> ma wartość true i is_constructible<Ty, allocator_arg_t, inner_allocator_type, args...> ma wartość true, wartość xargs... to allocator_arg, inner_allocator(), args....

  • Jeśli uses_allocator<Ty, inner_allocator_type> ma wartość true i is_constructible<Ty, args..., inner_allocator()> ma wartość true, wartość xargs... to args..., 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

Prawo
Istniejący scoped_allocator_adaptorelement .

Al
Istniejący alokator do użycia jako alokator zewnętrzny.

Reszta
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.

Zobacz też

Odwołanie do plików nagłówka