Namespaces
Variants

std:: raw_storage_iterator

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
raw_storage_iterator
( 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>
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 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

void

(hasta C++20)

std::ptrdiff_t

(desde C++20)
pointer void
reference void

Los tipos de miembro iterator_category , value_type , difference_type , pointer y reference deben obtenerse heredando de std:: iterator < std:: output_iterator_tag , void , void , void , void > .

(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

proporciona información sobre tipos de allocator
(class template)
implementa allocator multinivel para contenedores multinivel
(class template)
verifica si el tipo especificado soporta construcción uses-allocator
(class template)