Heim  >  Artikel  >  Backend-Entwicklung  >  Ist ein verschobener „std::vector“ immer leer?

Ist ein verschobener „std::vector“ immer leer?

Barbara Streisand
Barbara StreisandOriginal
2024-11-18 03:36:02836Durchsuche

Is a Moved-From `std::vector` Always Empty?

Ist ein verschobener Vektor immer leer?

Das Verschieben von Objekten in C hinterlässt sie in einem unbestimmten Zustand. Obwohl es in dieser Regel keinen expliziten Ausschluss für Vektoren gibt, kann es eine Herausforderung sein, eine praktikable Implementierung zu finden, die nicht zu einem leeren Vektor führen würde.

Konstruktor verschieben

Der Der Verschiebungskonstruktor für Vektoren muss eine konstante Komplexität aufweisen. Dies macht es erforderlich, Ressourcen aus dem verschobenen Vektor zu stehlen und ihn leer zu lassen. Daher ist für den Verschiebungskonstruktor der Verschiebungsvektor immer leer.

Zuweisungsoperator verschieben

Das Verhalten des Verschiebungszuweisungsoperators hängt vom Allokator des Vektors ab. Es gibt drei Hauptfälle:

Fall 1:
Propagate_on_container_move_assignment ist wahr.

In diesem Fall kommt es zu Zerstörung, Freigabe, Zuordnungsverschiebung und Speicherpufferübertragung , wobei der verschobene Vektor leer bleibt.

Fall 2:
Propagate_on_container_move_assignment ist falsch, aber Allokatoren sind gleich.

Ähnlich wie in Fall 1 wird der verschobene Vektor geleert.

Fall 3:
Propagate_on_container_move_assignment ist falsch und Allokatoren sind ungleich.

Es ist unmöglich, Ressourcen direkt zu übertragen. Stattdessen müssen Elemente einzeln verschoben werden. Wenn der verschobene Vektor Elemente ohne Verschiebungskonstruktoren enthält, bleibt er nicht leer. Allerdings könnte die Implementierung optional v.clear() aufrufen, um es zu leeren, obwohl dies vom Standard nicht gefordert wird.

Das obige ist der detaillierte Inhalt vonIst ein verschobener „std::vector“ immer leer?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn