Heim > Backend-Entwicklung > C++ > Was ist der Zustand eines verschobenen Vektors in C?

Was ist der Zustand eines verschobenen Vektors in C?

Patricia Arquette
Freigeben: 2024-11-23 21:42:15
Original
804 Leute haben es durchsucht

What is the State of a Moved-From Vector in C  ?

Leerzustand von verschobenen Vektoren

In C-Standardbibliothekstypen werden verschobene Objekte im Allgemeinen in einen gültigen, aber nicht spezifizierten Zustand versetzt . Es besteht jedoch die Frage, ob Vektoren explizit unter diese Regel fallen.

Verhalten des Bewegungskonstruktors

Für den Bewegungskonstruktor des Vektors ist der verschobene Vektor durchweg leer, da die Forderung nach konstanter Komplexität. Der Konstruktor stiehlt Ressourcen aus dem Quellvektor, um die neue Instanz zu erstellen, und lässt den ursprünglichen Vektor in einem leeren Zustand.

Verhalten des Verschiebungszuweisungsoperators

Das Verhalten der Verschiebung des Vektors Der Zuweisungsoperator ist differenzierter und hängt vom Allokator ab:

Fall 1: Verschiebungszuweisung weitergeben = True

In diesem Fall ist der verschobene Vektor immer leer. Der Zuweisungsoperator zerstört Elemente, gibt Kapazität frei, überträgt den Besitz des Speicherpuffers vom Quellvektor und verschiebt die Allokatoren. Dadurch verbleibt der ursprüngliche Vektor in einem leeren Zustand.

Fall 2: Verschiebungszuweisung weitergeben = Falsch, gleiche Allokatoren

Ähnlich wie Fall 1 ist der verschobene Vektor vom Umzugszuweisungsoperator geleert. Die Allokatoren werden nicht verschoben und die Fallunterscheidung erfolgt dynamisch.

Fall 3: Verschiebezuweisung weitergeben = Falsch, ungleiche Allokatoren

Der komplizierteste Fall betrifft unterschiedliche Allokatoren. Hier kann die Verschiebungszuweisung keine Ressourcen verschieben oder Allokatoren zuweisen. Stattdessen werden einzelne Elemente vom Quellvektor zum Zielvektor verschoben. Abhängig von den Allokatorfunktionen und den Anforderungen an die Elementkonstruktion muss der verschobene Vektor nicht unbedingt leer sein. Einige Implementierungen entscheiden sich jedoch möglicherweise dafür, clear() explizit für den Quellvektor aufzurufen und ihn leer zu lassen.

Das obige ist der detaillierte Inhalt vonWas ist der Zustand eines verschobenen Vektors in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage