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)
Definido en el encabezado <memory_resource>
template < class T >
class polymorphic_allocator ;
(desde C++17)
(hasta C++20)
template < class T = std:: byte >
class polymorphic_allocator ;
(desde C++20)

La plantilla de clase std::pmr::polymorphic_allocator es un Allocator que exhibe un comportamiento de asignación diferente dependiendo del std::pmr::memory_resource desde el cual se construye. Dado que memory_resource utiliza polimorfismo dinámico para gestionar las asignaciones, diferentes instancias de contenedores con polymorphic_allocator como su tipo de asignador estático son interoperables, pero pueden comportarse como si tuvieran diferentes tipos de asignadores.

Todas las especializaciones de polymorphic_allocator cumplen con los requisitos de completitud del asignador .

La función miembro polymorphic_allocator::construct realiza construcción uses-allocator , de modo que los elementos de un contenedor que utiliza un polymorphic_allocator usarán ese mismo asignador para sus propias asignaciones. Por ejemplo, un std:: pmr :: vector < std:: pmr :: string > utilizará el mismo memory_resource para el almacenamiento del vector y para el almacenamiento de cada string .

Para asignadores no polimórficos, se puede lograr una propagación similar con la ayuda de std::scoped_allocator_adaptor .

Contenidos

Tipos de miembros

Tipo de miembro Definición
value_type T

Funciones miembro

construye un polymorphic_allocator
(función miembro pública)
(destructor)
(declarado implícitamente)
destructor declarado implícitamente
(función miembro pública)
operator=
[eliminado]
operador de asignación de copia está eliminado
(función miembro pública)
Funciones miembro públicas
asigna memoria
(función miembro pública)
desasigna memoria
(función miembro pública)
construye un objeto en almacenamiento asignado
(función miembro pública)
(obsoleto en C++20) (rehabilitado en C++26)
destruye un objeto en almacenamiento asignado
(función miembro pública)
asigna memoria en bruto alineada desde el recurso subyacente
(función miembro pública)
libera memoria en bruto obtenida de allocate_bytes
(función miembro pública)
asigna memoria en bruto adecuada para un objeto o un array
(función miembro pública)
libera memoria en bruto obtenida por allocate_object
(función miembro pública)
(C++20)
asigna y construye un objeto
(función miembro pública)
destruye y desasigna un objeto
(función miembro pública)
crea un nuevo polymorphic_allocator para uso por el constructor de copia de un contenedor
(función miembro pública)
devuelve un puntero al recurso de memoria subyacente
(función miembro pública)

Funciones no miembro

(eliminado en C++20)
comparar dos polymorphic_allocator s
(función)

Notas

polymorphic_allocator no se propaga en la asignación de copia de contenedores, asignación de movimiento o intercambio. Como resultado, la asignación de movimiento de un contenedor que utiliza polymorphic_allocator puede lanzar una excepción, y el intercambio de dos contenedores que utilizan polymorphic_allocator cuyos asignadores no son iguales resulta en comportamiento indefinido.

Macro de prueba de características Valor Std Característica
__cpp_lib_polymorphic_allocator 201902L (C++20) std::pmr::polymorphic_allocator<> como tipo de vocabulario

Véase también

una interfaz abstracta para clases que encapsulan recursos de memoria
(clase)