2016-11-22 3 views
-2

Ich habe irgendwo gelesen, dass Objekte, die bereits in einem Vektor sind, kopiert werden, wenn der Vektor neu zugewiesen wird.Sollen alle Objekte in einem Vektor einen Kopierkonstruktor haben?

Warum ist das? Sollten sie nicht einfach bewegt werden? Bedeutet dies auch, dass man einen Kopierkonstruktor für in Vektoren gespeicherte Objekte schreiben sollte?

+0

Es ist ziemlich klar [hier] (http://en.cppreference.com/w/cpp/container/vector). Seit C++ 11 ist es genug, dass die Elemente das 'Löschbare' Konzept erfüllen. –

Antwort

3

Vom C++ reference:

Bis zum Aufkommen von 11 C++ die Elemente eines Vektors erfüllt müssen die Anforderungen der CopyAssignable und CopyConstructible.

Von C++ 11 und C++ 17 hängen die Anforderungen, die an die Elemente gestellt werden, von den tatsächlichen Operationen ab, die für den Container ausgeführt werden. Im Allgemeinen ist es erforderlich, dass der Elementtyp ein vollständiger Typ ist und die Anforderungen von Erasable erfüllt, aber viele Elementfunktionen stellen strengere Anforderungen auf.

Ab C++ 17 und darüber hinaus hängen die Anforderungen an die Elemente von den tatsächlichen Operationen ab, die an dem Container ausgeführt werden. Im Allgemeinen ist es erforderlich, dass der Elementtyp die Anforderungen von Erasable erfüllt, aber viele Elementfunktionen stellen strengere Anforderungen auf. Dieser Container (aber nicht seine Mitglieder) kann mit einem unvollständigen Elementtyp instanziiert werden, wenn der Zuordner die Zuordnungsvollständigkeitsanforderungen erfüllt.

Verwandte Themen