std:: raw_storage_iterator
|
Défini dans l'en-tête
<memory>
|
||
|
template
<
class
OutputIt,
class
T
>
class
raw_storage_iterator
|
(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
|
|
||||
pointer
|
void | ||||
reference
|
void |
|
Les types membres
|
(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
|
(C++11)
|
fournit des informations sur les types d'allocateur
(modèle de classe) |
|
(C++11)
|
implémente un allocateur multi-niveaux pour les conteneurs multi-niveaux
(modèle de classe) |
|
(C++11)
|
vérifie si le type spécifié prend en charge la construction uses-allocator
(modèle de classe) |