std:: raw_storage_iterator
|
Definido en el encabezado
<memory>
|
||
|
template
<
class
OutputIt,
class
T
>
class
raw_storage_iterator
|
(hasta C++17) | |
|
template
<
class
OutputIt,
class
T
>
class raw_storage_iterator ; |
(desde C++17)
(obsoleto en C++17) (eliminado en C++20) |
|
El iterador de salida
std::raw_storage_iterator
permite que los algoritmos estándar almacenen resultados en memoria no inicializada. Cada vez que el algoritmo escribe un objeto de tipo
T
al iterador desreferenciado, el objeto se construye por copia en la ubicación del almacenamiento no inicializado apuntado por el iterador. El parámetro de plantilla
OutputIt
es cualquier tipo que cumpla con los requisitos de
LegacyOutputIterator
y tenga
operator
*
definido para devolver un objeto, para el cual
operator
&
devuelve un objeto de tipo
T*
. Normalmente, el tipo
T*
se utiliza como
OutputIt
.
Contenidos |
Requisitos de tipo
-
OutputIt
debe cumplir con los requisitos de
LegacyOutputIterator
.
|
Funciones miembro
crea un nuevo
raw_storage_iterator
(función miembro pública) |
|
|
construye un objeto en la ubicación apuntada del búfer
(función miembro pública) |
|
|
desreferencia el iterador
(función miembro pública) |
|
|
avanza el iterador
(función miembro pública) |
|
|
(since C++17)
|
proporciona acceso al iterador encapsulado
(función miembro pública) |
Tipos de miembros
| Tipo de miembro | Definición | ||||
iterator_category
|
std:: output_iterator_tag | ||||
value_type
|
void | ||||
difference_type
|
|
||||
pointer
|
void | ||||
reference
|
void |
|
Los tipos de miembro
|
(hasta C++17) |
Nota
std::raw_storage_iterator
fue desaprobado principalmente debido a su comportamiento inseguro ante excepciones. A diferencia de
std::uninitialized_copy
, no maneja excepciones durante operaciones como
std::copy
de forma segura, lo que potencialmente puede conducir a fugas de recursos debido a la falta de seguimiento del número de objetos construidos exitosamente y su destrucción adecuada en presencia de excepciones.
Ejemplo
#include <algorithm> #include <iostream> #include <memory> #include <string> int main() { const std::string s[] = {"This", "is", "a", "test", "."}; std::string* p = std::allocator<std::string>().allocate(5); std::copy(std::begin(s), std::end(s), std::raw_storage_iterator<std::string*, std::string>(p)); for (std::string* i = p; i != p + 5; ++i) { std::cout << *i << '\n'; i->~basic_string<char>(); } std::allocator<std::string>().deallocate(p, 5); }
Salida:
This is a test .
Véase también
|
(C++11)
|
proporciona información sobre tipos de allocator
(class template) |
|
(C++11)
|
implementa allocator multinivel para contenedores multinivel
(class template) |
|
(C++11)
|
verifica si el tipo especificado soporta construcción uses-allocator
(class template) |