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, pakOUTERMOST(X)
jeOUTERMOST(X.outer_allocator())
.OUTERMOST(X)
V opačném případě jeX
.
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, pakxargs...
jeargs...
.Pokud
uses_allocator<Ty, inner_allocator_type>
má hodnotu true ais_constructible<Ty, allocator_arg_t, inner_allocator_type, args...>
má true, pakxargs...
jeallocator_arg, inner_allocator(), args...
.Pokud
uses_allocator<Ty, inner_allocator_type>
má hodnotu true ais_constructible<Ty, args..., inner_allocator()>
má true, pakxargs...
jeargs..., 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.