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.
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.
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.
Véase también
| DefaultConstructible | |
| CopyInsertable | |
| MoveInsertable | |
| EmplaceConstructible | |
| Erasable |