Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Representerar ett kapsling av allokerare.
Syntax
template <class Outer, class... Inner>
class scoped_allocator_adaptor;
Anmärkningar
Klassmallen kapslar in ett kapsling av en eller flera allokerare. Varje sådan klass har en yttersta allokerare av typen outer_allocator_type, en synonym för Outer, som är en offentlig bas för scoped_allocator_adaptor objektet.
Outer används för att allokera minne som ska användas av en container. Du kan hämta en referens till det här allokeringsbasobjektet genom att anropa outer_allocator.
Resten av boet har typen inner_allocator_type. En inre allokerare används för att allokera minne för element i en container. Du kan hämta en referens till det lagrade objektet av den här typen genom att anropa inner_allocator. Om Inner... inte är tomt inner_allocator_type har du typen scoped_allocator_adaptor<Inner...>, och inner_allocator anger ett medlemsobjekt. Annars inner_allocator_type har du typen scoped_allocator_adaptor<Outer>, och inner_allocator anger hela objektet.
Boet fungerar som om det har godtyckligt djup och replikerar sin innersta inkapslade allokerare efter behov.
Flera begrepp som inte ingår i det synliga gränssnittshjälpmedlet när du beskriver beteendet för den här klassmallen. En yttersta allokeringsfaktor förmedlar alla anrop till konstruktions- och destrueringsmetoderna. Den definieras effektivt av den rekursiva funktionen OUTERMOST(X), där OUTERMOST(X) är något av följande.
Om
X.outer_allocator()är välformulerad ärOUTERMOST(X)detOUTERMOST(X.outer_allocator()).Annars är
OUTERMOST(X)X.
Tre typer definieras för expositionens skull:
| Typ | Beskrivning |
|---|---|
Outermost |
Typen av OUTERMOST(*this). |
Outermost_traits |
allocator_traits<Outermost> |
Outer_traits |
allocator_traits<Outer> |
Konstruktörer
| Namn | Beskrivning |
|---|---|
| scoped_allocator_adaptor | Konstruerar ett scoped_allocator_adaptor objekt. |
Typedefs
| Namn | Beskrivning |
|---|---|
const_pointer |
Den här typen är en synonym för den const_pointer som är associerad med allokeraren Outer. |
const_void_pointer |
Den här typen är en synonym för den const_void_pointer som är associerad med allokeraren Outer. |
difference_type |
Den här typen är en synonym för den difference_type som är associerad med allokeraren Outer. |
inner_allocator_type |
Den här typen är synonym för typen av den kapslade adaptern scoped_allocator_adaptor<Inner...>. |
outer_allocator_type |
Den här typen är synonym för typen av basallokerare Outer. |
pointer |
Den här typen är en synonym för den pointer som är associerad med allokeraren Outer. |
propagate_on_container_copy_assignment |
Typen gäller endast sant om Outer_traits::propagate_on_container_copy_assignment den innehåller sant eller inner_allocator_type::propagate_on_container_copy_assignment innehåller sant. |
propagate_on_container_move_assignment |
Typen gäller endast sant om Outer_traits::propagate_on_container_move_assignment den innehåller sant eller inner_allocator_type::propagate_on_container_move_assignment innehåller sant. |
propagate_on_container_swap |
Typen gäller endast sant om Outer_traits::propagate_on_container_swap den innehåller sant eller inner_allocator_type::propagate_on_container_swap innehåller sant. |
size_type |
Den här typen är en synonym för den size_type som är associerad med allokeraren Outer. |
value_type |
Den här typen är en synonym för den value_type som är associerad med allokeraren Outer. |
void_pointer |
Den här typen är en synonym för den void_pointer som är associerad med allokeraren Outer. |
Strukturer
| Namn | Beskrivning |
|---|---|
| scoped_allocator_adaptor::rebind Struct | Definierar typen Outer::rebind<Other>::other som synonym för scoped_allocator_adaptor<Other, Inner...>. |
Metoder
| Namn | Beskrivning |
|---|---|
| allokera | Allokerar minne med hjälp av allokeraren Outer . |
| konstruera | Konstruerar ett objekt. |
| frigöra | Frigör objekt med hjälp av den yttre allokeraren. |
| förstöra | Förstör ett angivet objekt. |
| inner_allocator | Hämtar en referens till det lagrade objektet av typen inner_allocator_type. |
| max_size | Avgör det maximala antalet objekt som kan allokeras av den yttre allokeraren. |
| outer_allocator | Hämtar en referens till det lagrade objektet av typen outer_allocator_type. |
| select_on_container_copy_construction | Skapar ett nytt scoped_allocator_adaptor objekt med varje lagrat allokeringsobjekt initierat genom att anropa select_on_container_copy_construction för varje motsvarande allokerare. |
Operatörer
| Operatör | Beskrivning |
|---|---|
| operator= | |
| operator== | |
| operator!= |
Kravspecifikation
Rubrik:<scoped_allocator>
namnområde: std
scoped_allocator_adaptor::allokera
Allokerar minne med hjälp av allokeraren Outer .
pointer allocate(size_type count);pointer allocate(size_type count, const_void_pointer hint);
Parameterar
antal
Antalet element för vilka tillräckligt med lagringsutrymme ska allokeras.
antydan
En pekare som kan hjälpa allokeringsobjektet genom att hitta adressen till ett objekt som allokerats före begäran.
Returvärde
Den första medlemsfunktionen returnerar Outer_traits::allocate(outer_allocator(), count). Den andra medlemsfunktionen returnerar Outer_traits::allocate(outer_allocator(), count, hint).
scoped_allocator_adaptor::construct
Konstruerar ett 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);
Parameterar
ptr
En pekare till den minnesplats där objektet ska konstrueras.
args
En lista med argument.
första
Ett objekt av den första typen i ett par.
andra
Ett objekt av den andra typen i ett par.
rätt
Ett befintligt objekt som ska flyttas eller kopieras.
Anmärkningar
Den första metoden konstruerar objektet vid ptr genom att anropa Outermost_traits::construct(OUTERMOST(*this), ptr, xargs...), där xargs... är något av följande.
Om
uses_allocator<Ty, inner_allocator_type>innehåller false ärxargs...detargs....Om
uses_allocator<Ty, inner_allocator_type>innehåller sant ochis_constructible<Ty, allocator_arg_t, inner_allocator_type, args...>innehåller sant ärxargs...detallocator_arg, inner_allocator(), args....Om
uses_allocator<Ty, inner_allocator_type>innehåller sant ochis_constructible<Ty, args..., inner_allocator()>innehåller sant ärxargs...detargs..., inner_allocator().
Den andra metoden konstruerar parobjektet på ptr genom att anropa Outermost_traits::construct(OUTERMOST(*this), &ptr->first, xargs...), där xargs... ändras first... som i listan ovan och Outermost_traits::construct(OUTERMOST(*this), &ptr->second, xargs...), där xargs... ändras second... som i listan ovan.
Den tredje metoden beter sig på samma sätt som this->construct(ptr, piecewise_construct, tuple<>, tuple<>).
Den fjärde metoden beter sig på samma sätt som this->construct(ptr, piecewise_construct, forward_as_tuple(std::forward<Uy1>(first), forward_as_tuple(std::forward<Uy2>(second)).
Den femte metoden beter sig på samma sätt som this->construct(ptr, piecewise_construct, forward_as_tuple(right.first), forward_as_tuple(right.second)).
Den sjätte metoden beter sig på samma sätt som 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
Frigör objekt med hjälp av den yttre allokeraren.
void deallocate(pointer ptr, size_type count);
Parameterar
ptr
En pekare till startplatsen för de objekt som ska frigöras.
antal
Antalet objekt som ska frigöras.
scoped_allocator_adaptor::d estroy
Förstör ett angivet objekt.
template <class Ty>
void destroy(Ty* ptr)
Parameterar
ptr
En pekare till objektet som ska förstöras.
Returvärde
Outermost_traits::destroy(OUTERMOST(*this), ptr)
scoped_allocator_adaptor::inner_allocator
Hämtar en referens till det lagrade objektet av typen inner_allocator_type.
inner_allocator_type& inner_allocator() noexcept;
const inner_allocator_type& inner_allocator() const noexcept;
Returvärde
En referens till det lagrade objektet av typen inner_allocator_type.
scoped_allocator_adaptor::max_size
Avgör det maximala antalet objekt som kan allokeras av den yttre allokeraren.
size_type max_size();
Returvärde
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
Hämtar en referens till det lagrade objektet av typen outer_allocator_type.
outer_allocator_type& outer_allocator() noexcept;
const outer_allocator_type& outer_allocator() const noexcept;
Returvärde
En referens till det lagrade objektet av typen outer_allocator_type.
scoped_allocator_adaptor::rebind Struct
Definierar typen Outer::rebind<Other>::other som synonym för scoped_allocator_adaptor<Other, Inner...>.
struct rebind{ typedef Other_traits::rebind<Other> Other_alloc; typedef scoped_allocator_adaptor<Other_alloc, Inner...> other; };
scoped_allocator_adaptor::scoped_allocator_adaptor Konstruktor
Konstruerar ett scoped_allocator_adaptor objekt. Innehåller även en destructor.
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();
Parameterar
rätt
En befintlig scoped_allocator_adaptor.
al
En befintlig allokerare som ska användas som den yttre allokeraren.
vila
En lista över allokerare som ska användas som inre allokerare.
Anmärkningar
Den första konstruktorn konstruerar som standard sina lagrade allokeringsobjekt. Var och en av de kommande tre konstruktorerna konstruerar sina lagrade allokeringsobjekt från motsvarande objekt till höger. Den sista konstruktorn konstruerar sina lagrade allokeringsobjekt från motsvarande argument i argumentlistan.
scoped_allocator_adaptor::select_on_container_copy_construction
Skapar ett nytt scoped_allocator_adaptor objekt med varje lagrat allokeringsobjekt initierat genom att anropa select_on_container_copy_construction för varje motsvarande allokerare.
scoped_allocator_adaptor select_on_container_copy_construction();
Returvärde
Den här metoden returnerar scoped_allocator_adaptor(Outer_traits::select_on_container_copy_construction(*this), inner_allocator().select_on_container_copy_construction())effektivt . Resultatet är ett nytt scoped_allocator_adaptor objekt med varje lagrat allokeringsobjekt initierat genom att anropa al.select_on_container_copy_construction() motsvarande allokerare al.
Se även
referens för huvudfiler