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!