Maison > développement back-end > C++ > Comment puis-je forcer std :: vector à utiliser la sémantique de déplacement pendant la croissance ?

Comment puis-je forcer std :: vector à utiliser la sémantique de déplacement pendant la croissance ?

Susan Sarandon
Libérer: 2024-12-21 13:51:10
original
619 Les gens l'ont consulté

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

Application de la sémantique de déplacement pendant la croissance du vecteur

Lorsqu'un std::vector avec des éléments non triviaux ayant des constructeurs de copie et de déplacement définis se développe, le le comportement par défaut consiste à utiliser le constructeur de copie pour créer de nouvelles copies d'éléments. Pour imposer l'utilisation du constructeur de déplacement à la place, C doit être informé que ce constructeur ne lève pas d'exceptions.

Implémentation

Pour indiquer que le constructeur de déplacement peut être appelé en toute sécurité, déclarez-le avec le spécificateur nosauf :

A(A &&rhs) noexcept { 
  std::cout << "i am the move constr" << std::endl;
  ... move-assignment code ... 
}
Copier après la connexion

Avec cette modification, std::vector donnera la priorité à l'utilisation du constructeur de déplacement pour la croissance, garantissant les ressources des éléments existants sont déplacées au lieu d'être copiées.

Informations supplémentaires

  • Pour une compréhension plus approfondie, reportez-vous à l'article "C Move sémantique et Exceptions."
  • Envisagez d'utiliser emplace_back au lieu de push_back lorsque cela est possible, car cela peut offrir des performances améliorées et clarté.
  • Demander explicitement la sémantique de déplacement en utilisant A(A &&rhs) = default; peut garantir que le constructeur de déplacement est marqué comme nosauf lorsque cela est possible. Certaines versions antérieures de Visual Studio peuvent ne pas prendre entièrement en charge cette fonctionnalité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal