Namespaces
Variants

std::pmr:: polymorphic_allocator

From cppreference.net
Memory management library
( exposition only* )
Allocators
pmr::polymorphic_allocator
(C++17)
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
Défini dans l'en-tête <memory_resource>
template < class T >
class polymorphic_allocator ;
(depuis C++17)
(jusqu'à C++20)
template < class T = std:: byte >
class polymorphic_allocator ;
(depuis C++20)

Le modèle de classe std::pmr::polymorphic_allocator est un Allocateur qui présente un comportement d'allocation différent selon la std::pmr::memory_resource à partir de laquelle il est construit. Étant donné que memory_resource utilise le polymorphisme à l'exécution pour gérer les allocations, différentes instances de conteneurs avec polymorphic_allocator comme type d'allocateur statique sont interopérables, mais peuvent se comporter comme si elles avaient des types d'allocateur différents.

Toutes les spécialisations de polymorphic_allocator satisfont aux exigences de complétude d'allocateur .

La fonction membre polymorphic_allocator::construct effectue une construction uses-allocator , de sorte que les éléments d'un conteneur utilisant un polymorphic_allocator utiliseront ce même allocateur pour leurs propres allocations. Par exemple, un std:: pmr :: vector < std:: pmr :: string > utilisera la même memory_resource pour le stockage du vector et pour le stockage de chaque string .

Pour les allocateurs non-polymorphiques, une propagation similaire peut être obtenue à l'aide de std::scoped_allocator_adaptor .

Table des matières

Types membres

Type de membre Définition
value_type T

Fonctions membres

construit un polymorphic_allocator
(fonction membre publique)
(destructeur)
(déclaré implicitement)
destructeur déclaré implicitement
(fonction membre publique)
operator=
[supprimé]
opérateur d'affectation par copie supprimé
(fonction membre publique)
Fonctions membres publiques
alloue de la mémoire
(fonction membre publique)
désalloue de la mémoire
(fonction membre publique)
construit un objet dans le stockage alloué
(fonction membre publique)
(obsolète en C++20) (réhabilité en C++26)
détruit un objet dans le stockage alloué
(fonction membre publique)
alloue de la mémoire brute alignée depuis la ressource sous-jacente
(fonction membre publique)
libère la mémoire brute obtenue depuis allocate_bytes
(fonction membre publique)
alloue de la mémoire brute adaptée pour un objet ou un tableau
(fonction membre publique)
libère la mémoire brute obtenue par allocate_object
(fonction membre publique)
(C++20)
alloue et construit un objet
(fonction membre publique)
détruit et désalloue un objet
(fonction membre publique)
crée un nouveau polymorphic_allocator pour utilisation par le constructeur de copie d'un conteneur
(fonction membre publique)
retourne un pointeur vers la ressource mémoire sous-jacente
(fonction membre publique)

Fonctions non membres

(supprimé en C++20)
comparer deux polymorphic_allocator s
(fonction)

Notes

polymorphic_allocator ne se propage pas lors de l'affectation par copie, l'affectation par déplacement ou l'échange de conteneurs. En conséquence, l'affectation par déplacement d'un conteneur utilisant polymorphic_allocator peut lever une exception, et l'échange de deux conteneurs utilisant polymorphic_allocator dont les allocateurs ne sont pas égaux entraîne un comportement indéfini.

Macro de test de fonctionnalité Valeur Std Fonctionnalité
__cpp_lib_polymorphic_allocator 201902L (C++20) std::pmr::polymorphic_allocator<> en tant que type de vocabulaire

Voir aussi

une interface abstraite pour les classes qui encapsulent les ressources mémoire
(classe)