Namensräume
Varianten
Aktionen

std::raw_storage_iterator

Von cppreference.com
< cpp‎ | memory
 
 
Speicherverwaltungsbibliothek
(nur Exposition*)
Algorithmen für uninitialisierten Speicher
(C++17)
(C++17)
(C++17)
Beschränkte uninitialisierte
Speicher-Algorithmen
C-Bibliothek

Allocatoren
Speicherressourcen
Unterstützung für Garbage Collection
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
Uninitialisierter Speicher
raw_storage_iterator
(bis C++20*)
Explizites Lebenszeitmanagement
 
 
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)
(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) [bearbeiten]
konstruiert ein Objekt an der durch den Zeiger angegebenen Stelle im Puffer
(public member function) [bearbeiten]
dereferenziert den Iterator
(public member function) [bearbeiten]
bewegt den Iterator vorwärts
(public member function) [bearbeiten]
(seit C++17)
ermöglicht den Zugriff auf den umschlossenen Iterator
(public member function) [bearbeiten]

[bearbeiten] Member-Typen

Mitgliedertyp Definition
iterator_category std::output_iterator_tag
value_type void
difference_type

void

(bis C++20)

std::ptrdiff_t

(seit C++20)
Zeiger void
Referenz void

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

(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

liefert Informationen über Allocator-Typen
(Klassen-Template) [edit]
implementiert mehrstufige Allokatoren für mehrstufige Container
(Klassen-Template) [edit]
prüft, ob der angegebene Typ Uses-Allocator-Konstruktion unterstützt
(Klassen-Template) [edit]