std::raw_storage_iterator
| Definiert in Header <memory>
|
||
template< class OutputIt, class T >
class raw_storage_iterator
: public std::iterator<std::output_iterator_tag, void, void, void, void>;
|
(bis C++17) | |
template< class OutputIt, class T >
class raw_storage_iterator;
|
(seit C++17) (veraltet in C++17) (entfernt in C++20) |
|
Der Ausgabeiterator std::raw_storage_iterator ermöglicht es Standardalgorithmen, Ergebnisse in nicht initialisiertem Speicher zu speichern. Jedes Mal, wenn der Algorithmus ein Objekt vom Typ T in den dereferenzierten Iterator schreibt, wird das Objekt durch Kopierkonstruktion an der Stelle im nicht initialisierten Speicher erstellt, auf die der Iterator zeigt. Der Vorlagenparameter OutputIt ist ein beliebiger Typ, der die Anforderungen von LegacyOutputIterator erfüllt und einen operator* definiert hat, der ein Objekt zurückgibt, für das operator& ein Objekt vom Typ T* zurückgibt. Üblicherweise wird der Typ T* als OutputIt verwendet.
Typanforderungen
-
OutputIt
muss die Anforderungen eines
LegacyOutputIterator
erfüllen.
|
Memberfunktionen
erstellt einen neuen
raw_storage_iterator
(öffentliche Elementfunktion) |
|
|
konstruiert ein Objekt an der gezeigten Stelle im Puffer
(öffentliche Elementfunktion) |
|
|
dereferenziert den Iterator
(öffentliche Elementfunktion) |
|
|
erhöht den Iterator
(öffentliche Elementfunktion) |
|
|
(since C++17)
|
bietet Zugriff auf den eingebetteten Iterator
(öffentliche Elementfunktion) |
Mitgliedertypen
| Mitgliedertyp | Definition | ||||
iterator_category
|
std:: output_iterator_tag | ||||
value_type
|
void | ||||
difference_type
|
|
||||
pointer
|
void | ||||
reference
|
void |
|
Die Member-Typen
|
(bis C++17) |
Hinweis
std::raw_storage_iterator
wurde hauptsächlich aufgrund seines ausnahmeunsicheren Verhaltens als veraltet eingestuft. Im Gegensatz zu
std::uninitialized_copy
behandelt es Ausnahmen während Operationen wie
std::copy
nicht sicher, was potenziell zu Ressourcenlecks führen kann, da die Anzahl der erfolgreich konstruierten Objekte und deren ordnungsgemäße Zerstörung bei Auftreten von Ausnahmen nicht nachverfolgt wird.
Beispiel
#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); }
Ausgabe:
This is a test .
Siehe auch
(C++11) |
liefert Informationen über Allokatortypen (Klassenvorlage) |
(C++11) |
implementiert einen mehrstufigen Allokator für mehrstufige Container (Klassenvorlage) |
(C++11) |
prüft, ob der angegebene Typ die Uses-Allocator-Konstruktion unterstützt (Klassenvorlage) |
| kopiert einen Bereich von Objekten in einen nicht initialisierten Speicherbereich (Funktionsvorlage & Algorithmus-Funktionsobjekt) | |
(C++20) |