Kann vector :: shrink_to_fit neu zuweisen?

8

Diese Member-Funktion, die im Standard keine definierten Auswirkungen hat (nur Bemerkungen), würde nur eingeschränkt verwendet werden, wenn sie nicht neu zugeordnet werden kann. Aber der einzige Absatz, den ich in dem Standard gefunden habe, der zutreffen scheint, wäre 23.2.1 / 11:

  

"Sofern nicht anders angegeben (entweder explizit oder durch Definition einer Funktion in Bezug auf andere Funktionen), darf das Aufrufen einer Container-Member-Funktion oder das Übergeben eines Containers als Argument an eine Bibliotheksfunktion Iteratoren nicht ungültig machen oder die Werte von Objekte in diesem Container. "

Da Neuzuweisungen Iteratoren ungültig machen, würde dies bedeuten, dass shrink_to_fit nicht formal neu zugeordnet werden kann? Wenn dies der Fall ist, kann die Funktion nur Auswirkungen auf Implementierungen haben, bei denen die Kapazitätsreduktion nicht neu zugewiesen wird, falls vorhanden ...

    
soulie 17.12.2012, 10:38
quelle

1 Antwort

7

Ich stimme zu, die Absicht ist offensichtlich, dass shrink_to_fit() neu zuweisen kann, daher sollte es erlaubt sein, Iteratoren ungültig zu machen.

Es wäre möglich, die Anforderung nur dann zu berücksichtigen, wenn die Implementierung ein realloc() -ähnliches Feature für Zuordner zur Verfügung stellt, das garantiert, den Speicher beim Schrumpfen des Blocks nicht zu verschieben, wodurch Iteratoren nicht ungültig werden. Aber ich glaube nicht, dass das beabsichtigt ist, wie es die kürzlich hinzugefügte Anforderung besagt, dass T ist MoveInsertable in den Vektor, da diese Anforderung nur relevant ist, wenn die Elemente an neue Positionen verschoben werden, wodurch Iteratoren ungültig werden würden.

Ich denke, Sie sollten ein Problem einreichen , um klarzustellen, dass shrink_to_fit() ungültig werden kann Iteratoren. Das Problem würde für basic_string , deque und vector gelten.

    
Jonathan Wakely 17.12.2012, 11:14
quelle

Tags und Links