Partager via


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) est OUTERMOST(X.outer_allocator()).

  • Sinon, OUTERMOST(X) est X.

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... est args....

  • Si uses_allocator<Ty, inner_allocator_type> et is_constructible<Ty, allocator_arg_t, inner_allocator_type, args...> ont la valeur true, xargs... est allocator_arg, inner_allocator(), args....

  • Si uses_allocator<Ty, inner_allocator_type> et is_constructible<Ty, args..., inner_allocator()> ont la valeur true, xargs... est args..., 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.

Voir aussi

Informations de référence sur les fichiers d’en-tête