Erzwingen der Bewegungssemantik während des Vektorwachstums
Wenn ein std::vector mit nicht trivialen Elementen mit definierten Kopier- und Verschiebungskonstruktoren wächst, wird der Das Standardverhalten besteht darin, den Kopierkonstruktor zum Erstellen neuer Elementkopien zu verwenden. Um stattdessen die Verwendung des Verschiebungskonstruktors zu erzwingen, muss C darüber informiert werden, dass dieser Konstruktor keine Ausnahmen auslöst.
Implementierung
Um anzugeben, dass der Verschiebungskonstruktor aufgerufen werden kann Deklarieren Sie es sicher mit dem Spezifizierer noexclusive:
A(A &&rhs) noexcept { std::cout << "i am the move constr" << std::endl; ... move-assignment code ... }
Mit dieser Änderung priorisiert std::vector die Verwendung des Verschiebungskonstruktors für Wachstum, indem sichergestellt wird, dass die Ressourcen vorhandener Elemente verschoben und nicht kopiert werden.
Zusätzliche Informationen
Das obige ist der detaillierte Inhalt vonWie kann ich std::vector zwingen, während des Wachstums die Bewegungssemantik zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!