std::raw_storage_iterator
| Definido en el encabezado <memory>
|
||
template< class OutputIt, class T >
class raw_storage_iterator
: public std::iterator<std::output_iterator_tag, void, void, void, void>;
|
(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 a los algoritmos estándar almacenar resultados en memoria no inicializada. Cada vez que el algoritmo escribe un objeto de tipo T en el iterador desreferenciado, el objeto se construye por copia en la ubicación en el almacenamiento no inicializado apuntado por el iterador. El parámetro de plantilla OutputIt es cualquier tipo que cumpla 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.
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 los tipos de asignador (plantilla de clase) |
(C++11) |
implementa un asignador de múltiples niveles para contenedores de múltiples niveles (plantilla de clase) |
(C++11) |
comprueba si el tipo especificado admite la construcción con uses-allocator (plantilla de clase) |
| copia un rango de objetos a un área de memoria no inicializada (plantilla de función, objeto función de algoritmo)&ranges::uninitialized_copy | |