Namespaces
Variants

std::raw_storage_iterator

De fr.cppreference.net
 
 
Bibliothèque de gestion de la mémoire
Allocateurs
Ressources mémoire
Stockage non initialisé (jusqu'à C++20*)
Support du ramasse-miettes (jusqu'à 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 standard de stocker les résultats dans une mémoire non initialisée. Lorsque l'algorithme écrit un objet de type T dans l'itérateur déréférencé, l'objet est copié-construit dans l'emplacement du stockage non initialisé pointé par l'itérateur. Le paramètre de modèle OutputIt est tout type qui satisfait aux exigences de LegacyOutputIterator et pour lequel operator* est défini pour retourner un objet, pour lequel operator& retourne un objet de type T*. Habituellement, le type T* est utilisé comme OutputIt.

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'allocator
(modèle de classe)
implémente un allocator multi-niveaux pour les conteneurs multi-niveaux
(modèle de classe)
vérifie si le type spécifié supporte la construction uses-allocator
(modèle de classe)
copie une plage d'objets vers une zone mémoire non initialisée
(modèle de fonction & objet fonction d'algorithme)