std::raw_storage_iterator
| Definiert in Header <memory> |
||
| template< class OutputIt, class T > class raw_storage_iterator |
(bis C++17) | |
| template< class OutputIt, class T > class raw_storage_iterator; |
(seit C++17) (veraltet in C++17) (in C++20 entfernt) |
|
Der Ausgabeiterator std::raw_storage_iterator ermöglicht es Standardalgorithmen, Ergebnisse in uninitialisiertem Speicher abzulegen. Wann immer der Algorithmus ein Objekt vom Typ T an den dereferenzierten Iterator schreibt, wird das Objekt in den Speicher an der vom Iterator angegebenen Stelle kopierkonstruiert. Der Template-Parameter OutputIt ist ein beliebiger Typ, der die Anforderungen an LegacyOutputIterator erfüllt und über einen operator* verfügt, der ein Objekt zurückgibt, dessen operator& ein Objekt vom Typ T* zurückgibt. Üblicherweise wird der Typ T* als OutputIt verwendet.
Inhalt |
[bearbeiten] Typ-Anforderungen
-OutputIt muss die Anforderungen an LegacyOutputIterator erfüllen. |
[bearbeiten] Memberfunktionen
erstellt einen neuen raw_storage_iterator(public member function) | |
| konstruiert ein Objekt an der durch den Zeiger angegebenen Stelle im Puffer (public member function) | |
| dereferenziert den Iterator (public member function) | |
| bewegt den Iterator vorwärts (public member function) | |
| (seit C++17) |
ermöglicht den Zugriff auf den umschlossenen Iterator (public member function) |
[bearbeiten] Member-Typen
| Mitgliedertyp | Definition | ||||
iterator_category
|
std::output_iterator_tag | ||||
value_type
|
void | ||||
difference_type
|
| ||||
Zeiger
|
void | ||||
Referenz
|
void |
|
Die Member-Typen |
(bis C++17) |
[bearbeiten] Hinweis
std::raw_storage_iterator wurde hauptsächlich wegen seines nicht ausnahme-sicheren Verhaltens als veraltet markiert. Im Gegensatz zu std::uninitialized_copy behandelt er Ausnahmen während Operationen wie std::copy nicht sicher, was aufgrund mangelnder Nachverfolgung der Anzahl erfolgreich konstruierter Objekte und deren ordnungsgemäßer Zerstörung im Falle von Ausnahmen zu Ressourcenlecks führen kann.
[bearbeiten] 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 .
[bearbeiten] Siehe auch
| (C++11) |
liefert Informationen über Allocator-Typen (Klassen-Template) |
| (C++11) |
implementiert mehrstufige Allokatoren für mehrstufige Container (Klassen-Template) |
| (C++11) |
prüft, ob der angegebene Typ Uses-Allocator-Konstruktion unterstützt (Klassen-Template) |