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)
Défini dans l'en-tête <memory>
template < class OutputIt, class T >

class raw_storage_iterator

: public std:: iterator < std:: output_iterator_tag , void , void , void , void > ;
(jusqu'à C++17)
template < class OutputIt, class T >
class raw_storage_iterator ;
(depuis C++17)
(déprécié en C++17)
(supprimé en C++20)

L'itérateur de sortie std::raw_storage_iterator permet aux algorithmes standards de stocker des résultats dans une mémoire non initialisée. Chaque fois que l'algorithme écrit un objet de type T dans l'itérateur déréférencé, l'objet est copié-construit à l'emplacement dans le stockage non initialisé pointé par l'itérateur. Le paramètre de template OutputIt est tout type qui satisfait aux exigences de LegacyOutputIterator et possède operator * défini pour retourner un objet, pour lequel operator & retourne un objet de type T* . Généralement, le type T* est utilisé comme OutputIt .

Table des matières

Exigences de type

-
OutputIt doit satisfaire aux exigences de LegacyOutputIterator .

Fonctions membres

crée un nouveau raw_storage_iterator
(fonction membre publique)
construit un objet à l'emplacement pointé dans le tampon
(fonction membre publique)
déréférence l'itérateur
(fonction membre publique)
avance l'itérateur
(fonction membre publique)
(depuis C++17)
fournit l'accès à l'itérateur encapsulé
(fonction membre publique)

Types membres

Type de membre Définition
iterator_category std:: output_iterator_tag
value_type void
difference_type

void

(jusqu'en C++20)

std::ptrdiff_t

(depuis C++20)
pointer void
reference void

Les types membres iterator_category , value_type , difference_type , pointer et reference doivent être obtenus en héritant de std:: iterator < std:: output_iterator_tag , void , void , void , void > .

(jusqu'à C++17)

Remarque

std::raw_storage_iterator a été déprécié principalement en raison de son comportement non sécurisé face aux exceptions. Contrairement à std::uninitialized_copy , il ne gère pas les exceptions pendant des opérations comme std::copy de manière sécurisée, ce qui peut entraîner des fuites de ressources en raison de l'absence de suivi du nombre d'objets construits avec succès et de leur destruction appropriée en présence d'exceptions.

Exemple

#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);
}

Sortie :

This
is
a
test
.

Voir aussi

fournit des informations sur les types d'allocateur
(modèle de classe)
implémente un allocateur multi-niveaux pour les conteneurs multi-niveaux
(modèle de classe)
vérifie si le type spécifié prend en charge la construction uses-allocator
(modèle de classe)