Namespaces
Variants

std::raw_storage_iterator

Von de.cppreference.net
 
 
Speicherverwaltungsbibliothek
Allokatoren
Speicherressourcen
Nicht initialisierter Speicher (bis C++20*)
Garbage-Collector-Unterstützung (bis C++23)
 
 
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

void

(bis C++20)

std::ptrdiff_t

(seit C++20)
pointer void
reference void

Die Member-Typen iterator_category , value_type , difference_type , pointer und reference müssen durch Vererbung von std:: iterator < std:: output_iterator_tag , void , void , void , void > erhalten werden.

(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

liefert Informationen über Allokatortypen
(Klassenvorlage)
implementiert einen mehrstufigen Allokator für mehrstufige Container
(Klassenvorlage)
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)