Sdílet prostřednictvím


scoped_allocator_adaptor – třída

Představuje vnoření alokátorů.

Syntaxe

template <class Outer, class... Inner>
class scoped_allocator_adaptor;

Poznámky

Šablona třídy zapouzdřuje vnoření jednoho nebo více alokátorů. Každá taková třída má vnější alokátor typu outer_allocator_type, synonymum pro Outer, což je veřejná základna objektu scoped_allocator_adaptor . Outer slouží k přidělení paměti, kterou má kontejner používat. Odkaz na tento základní objekt alokátoru lze získat voláním outer_allocator.

Zbytek vnoření má typ inner_allocator_type. Vnitřní alokátor se používá k přidělení paměti pro prvky v kontejneru. Odkaz na uložený objekt tohoto typu lze získat voláním inner_allocator. Pokud Inner... není prázdný, inner_allocator_type má typ scoped_allocator_adaptor<Inner...>a inner_allocator určuje objekt člena. inner_allocator_type V opačném případě má typ scoped_allocator_adaptor<Outer>a inner_allocator určuje celý objekt.

Vnoření se chová, jako by mělo libovolnou hloubku, a podle potřeby replikuje svůj vnitřní zapouzdřený alokátor.

Několik konceptů, které nejsou součástí viditelného rozhraní, pomáhají popsat chování této šablony třídy. Vnější alokátor medituje všechna volání konstruktoru a zničí metody. Je efektivně definován rekurzivní funkcí OUTERMOST(X), kde OUTERMOST(X) je jedním z následujících.

  • Pokud X.outer_allocator() je dobře vytvořen, pak OUTERMOST(X) je OUTERMOST(X.outer_allocator()).

  • OUTERMOST(X) V opačném případě je X.

Pro účely expozice jsou definovány tři typy:

Typ Popis
Outermost Typ .OUTERMOST(*this)
Outermost_traits allocator_traits<Outermost>
Outer_traits allocator_traits<Outer>

Konstruktory

Název Popis
scoped_allocator_adaptor scoped_allocator_adaptor Vytvoří objekt.

Typedefs

Název Popis
const_pointer Tento typ je synonymem pro const_pointer , který je přidružen k alokátoru Outer.
const_void_pointer Tento typ je synonymem pro const_void_pointer , který je přidružen k alokátoru Outer.
difference_type Tento typ je synonymem pro difference_type , který je přidružen k alokátoru Outer.
inner_allocator_type Tento typ je synonymem pro typ vnořeného adaptéru scoped_allocator_adaptor<Inner...>.
outer_allocator_type Tento typ je synonymem pro typ základního alokátoru Outer.
pointer Tento typ je synonymem pro pointer přidruženého alokátoru Outer.
propagate_on_container_copy_assignment Typ má hodnotu true pouze v případě, že Outer_traits::propagate_on_container_copy_assignment obsahuje hodnotu true nebo inner_allocator_type::propagate_on_container_copy_assignment má hodnotu true.
propagate_on_container_move_assignment Typ má hodnotu true pouze v případě, že Outer_traits::propagate_on_container_move_assignment obsahuje hodnotu true nebo inner_allocator_type::propagate_on_container_move_assignment má hodnotu true.
propagate_on_container_swap Typ má hodnotu true pouze v případě, že Outer_traits::propagate_on_container_swap obsahuje hodnotu true nebo inner_allocator_type::propagate_on_container_swap má hodnotu true.
size_type Tento typ je synonymem pro size_type přidruženého alokátoru Outer.
value_type Tento typ je synonymem pro value_type přidruženého alokátoru Outer.
void_pointer Tento typ je synonymem pro void_pointer přidruženého alokátoru Outer.

Struktury

Název Popis
scoped_allocator_adaptor::rebind – struktura Definuje typ Outer::rebind\<Other>::other jako synonymum pro scoped_allocator_adaptor\<Other, Inner...>.

Metody

Název Popis
allocate Přidělí paměť pomocí alokátoru Outer .
konstruovat Vytvoří objekt.
uvolnit Uvolní objekty pomocí vnějšího alokátoru.
zničit Zničí zadaný objekt.
inner_allocator Načte odkaz na uložený objekt typu inner_allocator_type.
max_size Určuje maximální počet objektů, které lze přidělit vnějším alokátorem.
outer_allocator Načte odkaz na uložený objekt typu outer_allocator_type.
select_on_container_copy_construction Vytvoří nový scoped_allocator_adaptor objekt s každým uloženým objektem alokátoru inicializovaný voláním select_on_container_copy_construction pro každý odpovídající alokátor.

Operátory

Operátor Popis
operator=
operator==
operator!=

Požadavky

Header:<scoped_allocator>

Obor názvů: std

scoped_allocator_adaptor::přidělení

Přidělí paměť pomocí alokátoru Outer .

pointer allocate(size_type count);pointer allocate(size_type count, const_void_pointer hint);

Parametry

count
Počet prvků, pro které je třeba přidělit dostatečné úložiště.

náznak
Ukazatel, který může pomoct objektu alokátoru vyhledáním adresy objektu přiděleného před požadavkem.

Návratová hodnota

První členová funkce vrátí Outer_traits::allocate(outer_allocator(), count)hodnotu . Druhá členová funkce vrátí Outer_traits::allocate(outer_allocator(), count, hint).

scoped_allocator_adaptor::construct

Vytvoří objekt.

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
Ukazatel na umístění paměti, kde má být objekt vytvořen.

args
Seznam argumentů

první
Objekt prvního typu v páru.

vteřina
Objekt druhého typu v páru.

Vpravo
Existující objekt, který se má přesunout nebo zkopírovat.

Poznámky

První metoda vytvoří objekt v ptr voláním Outermost_traits::construct(OUTERMOST(*this), ptr, xargs...), kde xargs... je jedna z následujících.

  • Pokud uses_allocator<Ty, inner_allocator_type> obsahuje false, pak xargs... je args....

  • Pokud uses_allocator<Ty, inner_allocator_type> má hodnotu true a is_constructible<Ty, allocator_arg_t, inner_allocator_type, args...> má true, pak xargs... je allocator_arg, inner_allocator(), args....

  • Pokud uses_allocator<Ty, inner_allocator_type> má hodnotu true a is_constructible<Ty, args..., inner_allocator()> má true, pak xargs... je args..., inner_allocator().

Druhá metoda vytvoří spárovaný objekt v ptr voláním Outermost_traits::construct(OUTERMOST(*this), &ptr->first, xargs...), kde xargs... je first... změněn jako v seznamu výše, a Outermost_traits::construct(OUTERMOST(*this), &ptr->second, xargs...), kde xargs... je second... změněn jako v seznamu výše.

Třetí metoda se chová stejně jako this->construct(ptr, piecewise_construct, tuple<>, tuple<>).

Čtvrtá metoda se chová stejně jako this->construct(ptr, piecewise_construct, forward_as_tuple(std::forward<Uy1>(first), forward_as_tuple(std::forward<Uy2>(second)).

Pátá metoda se chová stejně jako this->construct(ptr, piecewise_construct, forward_as_tuple(right.first), forward_as_tuple(right.second)).

Šestá metoda se chová stejně jako 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

Uvolní objekty pomocí vnějšího alokátoru.

void deallocate(pointer ptr, size_type count);

Parametry

ptr
Ukazatel na počáteční umístění objektů, které se mají uvolnit.

count
Počet objektů, které se mají uvolnit.

scoped_allocator_adaptor::d estroy

Zničí zadaný objekt.

template <class Ty>
void destroy(Ty* ptr)

Parametry

ptr
Ukazatel na objekt, který se má zničit.

Návratová hodnota

Outermost_traits::destroy(OUTERMOST(*this), ptr)

scoped_allocator_adaptor::inner_allocator

Načte odkaz na uložený objekt typu inner_allocator_type.

inner_allocator_type& inner_allocator() noexcept;
const inner_allocator_type& inner_allocator() const noexcept;

Návratová hodnota

Odkaz na uložený objekt typu inner_allocator_type.

scoped_allocator_adaptor::max_size

Určuje maximální počet objektů, které lze přidělit vnějším alokátorem.

size_type max_size();

Návratová hodnota

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

Načte odkaz na uložený objekt typu outer_allocator_type.

outer_allocator_type& outer_allocator() noexcept;
const outer_allocator_type& outer_allocator() const noexcept;

Návratová hodnota

Odkaz na uložený objekt typu outer_allocator_type.

scoped_allocator_adaptor::rebind – struktura

Definuje typ Outer::rebind\<Other>::other jako synonymum pro scoped_allocator_adaptor\<Other, Inner...>.

rebind{ typedef Other_traits::rebind<Other> Other_alloc; typedef scoped_allocator_adaptor Other_alloc<, Inner...> other; };

scoped_allocator_adaptor::scoped_allocator_adaptor – konstruktor

scoped_allocator_adaptor Vytvoří objekt. Obsahuje také 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

Vpravo
Existující scoped_allocator_adaptor.

hliník
Existující alokátor, který se má použít jako vnější alokátor.

zbytek
Seznam alokátorů, které se mají použít jako vnitřní alokátory.

Poznámky

První konstruktor výchozí vytvoří své uložené alokátor objekty. Každý z následujících tří konstruktorů vytvoří své uložené objekty alokátoru z odpovídajících objektů vpravo. Poslední konstruktor sestaví své uložené alokátor objekty z odpovídajících argumentů v seznamu argumentů.

scoped_allocator_adaptor::select_on_container_copy_construction

Vytvoří nový scoped_allocator_adaptor objekt s každým uloženým objektem alokátoru inicializovaný voláním select_on_container_copy_construction pro každý odpovídající alokátor.

scoped_allocator_adaptor select_on_container_copy_construction();

Návratová hodnota

Tato metoda efektivně vrací scoped_allocator_adaptor(Outer_traits::select_on_container_copy_construction(*this), inner_allocator().select_on_container_copy_construction()). Výsledkem je nový scoped_allocator_adaptor objekt s každým uloženým objektem alokátor inicializován voláním al.select_on_container_copy_construction() odpovídajícího alokátoru al.

Viz také

Referenční informace k souborům hlaviček