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
Susan SarandonOriginal
2024-12-21 13:51:10625Durchsuche

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 ... 
}

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!

Stellungnahme:
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