scoped_allocator_adaptor::construct, classe
Représente une imbrication d’allocateurs.
Syntaxe
template <class Outer, class... Inner>
class scoped_allocator_adaptor;
Notes
Le modèle de classe encapsule un ou plusieurs allocateurs. Cette classe a un allocateur externe de type outer_allocator_type
, un synonyme de Outer
, qui est une base publique de l’objet scoped_allocator_adaptor
. Outer
s’utilise pour allouer de la mémoire pour un conteneur. Vous pouvez obtenir une référence à cet objet de base allocateur en appelant outer_allocator
.
Le reste de l’imbrication a le type inner_allocator_type
. Un allocateur interne s’utilise pour allouer de la mémoire pour les éléments dans un conteneur. Vous pouvez obtenir une référence à l’objet stocké de ce type en appelant inner_allocator
. S’il Inner...
n’est pas vide, inner_allocator_type
a le type scoped_allocator_adaptor<Inner...>
et inner_allocator
désigne un objet membre. Sinon, inner_allocator_type
a le type scoped_allocator_adaptor<Outer>
, et inner_allocator
désigne l’objet entier.
L’imbrication se comporte comme si elle avait une profondeur arbitraire, en répliquant son allocateur encapsulé le plus profond selon les besoins.
Plusieurs concepts qui ne font pas partie de l’aide de l’interface visible pour décrire le comportement de ce modèle de classe. Un allocateur externe sert d’intermédiaire pour tous les appels aux méthodes construct et destroy. Elle est définie efficacement par la fonction OUTERMOST(X)
récursive, où OUTERMOST(X)
est l’une des suivantes.
Si
X.outer_allocator()
est bien formé,OUTERMOST(X)
estOUTERMOST(X.outer_allocator())
.Sinon,
OUTERMOST(X)
estX
.
Trois types sont définis pour les besoins de la démonstration :
Type | Description |
---|---|
Outermost |
Type d'élément OUTERMOST(*this) . |
Outermost_traits |
allocator_traits<Outermost> |
Outer_traits |
allocator_traits<Outer> |
Constructeurs
Nom | Description |
---|---|
scoped_allocator_adaptor | Construit un objet scoped_allocator_adaptor . |
Typedefs
Nom | Description |
---|---|
const_pointer |
Ce type est un synonyme du const_pointer qui est associé à l’allocateur Outer . |
const_void_pointer |
Ce type est un synonyme du const_void_pointer qui est associé à l’allocateur Outer . |
difference_type |
Ce type est un synonyme du difference_type qui est associé à l’allocateur Outer . |
inner_allocator_type |
Ce type est un synonyme du type de l’adaptateur imbriqué scoped_allocator_adaptor<Inner...> . |
outer_allocator_type |
Ce type est un synonyme du type de l’adaptateur de base Outer . |
pointer |
Ce type est un synonyme du pointer qui est associé à l’allocateur Outer . |
propagate_on_container_copy_assignment |
Le type a la valeur true uniquement si Outer_traits::propagate_on_container_copy_assignment ou inner_allocator_type::propagate_on_container_copy_assignment a la valeur true. |
propagate_on_container_move_assignment |
Le type a la valeur true uniquement si Outer_traits::propagate_on_container_move_assignment ou inner_allocator_type::propagate_on_container_move_assignment a la valeur true. |
propagate_on_container_swap |
Le type a la valeur true uniquement si Outer_traits::propagate_on_container_swap ou inner_allocator_type::propagate_on_container_swap a la valeur true. |
size_type |
Ce type est un synonyme du size_type qui est associé à l’allocateur Outer . |
value_type |
Ce type est un synonyme du value_type qui est associé à l’allocateur Outer . |
void_pointer |
Ce type est un synonyme du void_pointer qui est associé à l’allocateur Outer . |
Structures
Nom | Description |
---|---|
scoped_allocator_adaptor::rebind, struct | Définit le type Outer::rebind\<Other>::other comme synonyme de scoped_allocator_adaptor\<Other, Inner...> . |
Méthodes
Nom | Description |
---|---|
allocate | Alloue de la mémoire à l’aide de l’allocateur Outer . |
construct | Construit un objet . |
deallocate | Libère des objets à l’aide de l’allocateur externe. |
destroy | Détruit un objet spécifié. |
inner_allocator | Récupère une référence à l’objet stocké de type inner_allocator_type . |
max_size | Détermine le nombre maximal d’objets pouvant être alloués par l’allocateur externe. |
outer_allocator | Récupère une référence à l’objet stocké de type outer_allocator_type . |
select_on_container_copy_construction | Crée un objet scoped_allocator_adaptor où chaque objet allocateur stocké est initialisé en appelant select_on_container_copy_construction pour chaque allocateur correspondant. |
Opérateurs
Opérateur | Description |
---|---|
operator= | |
operator== | |
operator!= |
Spécifications
Header :<scoped_allocator>
Espace de noms : std
scoped_allocator_adaptor ::allocate
Alloue de la mémoire à l’aide de l’allocateur Outer
.
pointer allocate(size_type count);pointer allocate(size_type count, const_void_pointer hint);
Paramètres
count
Nombre d’éléments pour lesquels un stockage suffisant doit être alloué.
indice
Pointeur pouvant aider l’objet allocateur en recherchant l’adresse d’un objet alloué avant la demande.
Valeur de retour
La première fonction membre retourne Outer_traits::allocate(outer_allocator(), count)
. La deuxième fonction membre retourne Outer_traits::allocate(outer_allocator(), count, hint)
.
scoped_allocator_adaptor ::construct
Construit un objet .
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);
Paramètres
ptr
Pointeur vers l’emplacement de mémoire où l’objet doit être construit.
args
Liste d’arguments.
first
Objet du premier type dans une paire.
second
Objet du deuxième type dans une paire.
right
Objet existant à déplacer ou copier.
Notes
La première méthode construit l’objet au niveau ptr en appelant Outermost_traits::construct(OUTERMOST(*this), ptr, xargs...)
, où xargs...
est l’une des méthodes suivantes.
Si
uses_allocator<Ty, inner_allocator_type>
a la valeur false,xargs...
estargs...
.Si
uses_allocator<Ty, inner_allocator_type>
etis_constructible<Ty, allocator_arg_t, inner_allocator_type, args...>
ont la valeur true,xargs...
estallocator_arg, inner_allocator(), args...
.Si
uses_allocator<Ty, inner_allocator_type>
etis_constructible<Ty, args..., inner_allocator()>
ont la valeur true,xargs...
estargs..., inner_allocator()
.
La deuxième méthode construit l’objet de paire au niveau ptr en appelant Outermost_traits::construct(OUTERMOST(*this), &ptr->first, xargs...)
, où xargs...
est first...
modifié comme dans la liste ci-dessus et Outermost_traits::construct(OUTERMOST(*this), &ptr->second, xargs...)
, où xargs...
est second...
modifié comme dans la liste ci-dessus.
La troisième méthode se comporte comme this->construct(ptr, piecewise_construct, tuple<>, tuple<>)
.
La quatrième méthode se comporte comme this->construct(ptr, piecewise_construct, forward_as_tuple(std::forward<Uy1>(first), forward_as_tuple(std::forward<Uy2>(second))
.
La cinquième méthode se comporte comme this->construct(ptr, piecewise_construct, forward_as_tuple(right.first), forward_as_tuple(right.second))
.
La sixième méthode se comporte comme 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 alallouer
Libère des objets à l’aide de l’allocateur externe.
void deallocate(pointer ptr, size_type count);
Paramètres
ptr
Pointeur vers l’emplacement de départ des objets à libérer.
count
Nombre d’objets à désallouer.
scoped_allocator_adaptor ::d estroy
Détruit un objet spécifié.
template <class Ty>
void destroy(Ty* ptr)
Paramètres
ptr
Pointeur vers l’objet à détruire.
Valeur de retour
Outermost_traits::destroy(OUTERMOST(*this), ptr)
scoped_allocator_adaptor ::inner_allocator
Récupère une référence à l’objet stocké de type inner_allocator_type
.
inner_allocator_type& inner_allocator() noexcept;
const inner_allocator_type& inner_allocator() const noexcept;
Valeur de retour
Référence à l’objet stocké de type inner_allocator_type
.
scoped_allocator_adaptor ::max_size
Détermine le nombre maximal d’objets pouvant être alloués par l’allocateur externe.
size_type max_size();
Valeur de retour
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
Récupère une référence à l’objet stocké de type outer_allocator_type
.
outer_allocator_type& outer_allocator() noexcept;
const outer_allocator_type& outer_allocator() const noexcept;
Valeur de retour
Référence à l’objet stocké de type outer_allocator_type
.
scoped_allocator_adaptor::rebind, struct
Définit le type Outer::rebind\<Other>::other
comme synonyme de 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, constructeur
Construit un objet scoped_allocator_adaptor
. Inclut également un destructeur.
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();
Paramètres
right
scoped_allocator_adaptor
existant.
Al
Allocateur existant à utiliser comme allocateur externe.
rest
Liste des allocateurs à utiliser comme allocateurs internes.
Notes
Le premier constructeur construit par défaut ses objets allocateur stockés. Chacun des trois constructeurs suivants construit ses objets d’allocator stockés à partir des objets correspondants à droite. Le dernier constructeur construit ses objets allocateur stockés à partir des arguments correspondants dans la liste d’arguments.
scoped_allocator_adaptor ::select_on_container_copy_construction
Crée un objet scoped_allocator_adaptor
où chaque objet allocateur stocké est initialisé en appelant select_on_container_copy_construction
pour chaque allocateur correspondant.
scoped_allocator_adaptor select_on_container_copy_construction();
Valeur de retour
Cette méthode retourne scoped_allocator_adaptor(Outer_traits::select_on_container_copy_construction(*this), inner_allocator().select_on_container_copy_construction())
. Le résultat est un nouvel scoped_allocator_adaptor
objet avec chaque objet allocator stocké initialisé en appelant al.select_on_container_copy_construction()
l’allocateur correspondant al.