Requisitos denominados de C++:DefaultInsertable(desde C++11)
Especifica que una instancia del tipo puede construirse por defecto en el sitio por un asignador de memoria dado.
[editar]Requisitos
El tipo T
es DefaultInsertable en el contenedor X
cuyo value_type
es idéntico a T
si, dados
A | un tipo asignador de memoria |
m | un l-valor de tipo A |
p | un puntero de tipo T* preparado por el contenedor |
donde X::allocator_type
es idéntico a std::allocator_traits<A>::rebind_alloc<T>,
la siguiente expresión está bien formada:
std::allocator_traits<A>::construct(m, p);
Si X
no reconoce el asignador o es una especialización de std::basic_string, el término se define como si A
fuera std::allocator<T>, excepto que no es necesario crear ningún objeto asignador y no se crean instancias las especializaciones definidas por el usuario de std::allocator.
[editar]Notas
Por defecto, esto inicializa por valor el objeto, como si fuera ::new((void*)p) T()(hasta C++20)std::construct_at(p)(desde C++20). Si no es deseable la inicialización por valor, por ejemplo, si el objeto es de un tipo no clase y no se necesita iniciarlo a cero, se puede evitar proporcionando un Allocator::construct
personalizado.
Aunque se requiere que se use una implementación de construct
personalizada al construir elementos de std::basic_string hasta C++23, todas las implementaciones solo usaron el mecanismo por defecto. El requisito se corrige mediante P1072R10 para que coincida con la práctica existente.
[editar]Véase también
DefaultConstructible | |
CopyInsertable | |
MoveInsertable | |
EmplaceConstructible | |
Erasable |