Heim > Backend-Entwicklung > C++ > Wie kann ich std::vector zwingen, während des Wachstums die Bewegungssemantik zu verwenden?

Wie kann ich std::vector zwingen, während des Wachstums die Bewegungssemantik zu verwenden?

Susan Sarandon
Freigeben: 2024-12-21 13:51:10
Original
668 Leute haben es durchsucht

How Can I Force std::vector to Use Move Semantics During Growth?

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 ... 
}
Nach dem Login kopieren

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

  • Weitere Informationen finden Sie im Artikel „ C Semantik und Ausnahmen verschieben Klarheit.
  • Explizite Anforderung der Bewegungssemantik mit A(A &&rhs) = default; kann sicherstellen, dass der Verschiebungskonstruktor nach Möglichkeit als „noexclusive“ markiert ist. Einige frühere Versionen von Visual Studio unterstützen diese Funktion möglicherweise nicht vollständig.

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!

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