Maison >développement back-end >C++ >Comment puis-je développer efficacement un vecteur C à l'aide de la sémantique de déplacement ?
Développer efficacement un vecteur avec la sémantique de déplacement
Lors de la manipulation d'un vecteur d'objets non triviaux, vous souhaiterez peut-être imposer l'utilisation de la déplacer le constructeur lorsque le vecteur grandit.
En C, un vecteur utilise généralement des constructeurs de copie pour instancier de nouveaux éléments lorsqu'il se développe. Cependant, pour tirer parti du constructeur de déplacement et de ses avantages en termes de performances, il est essentiel d'informer explicitement std::vector que le constructeur de déplacement est sûr et à l'épreuve des exceptions.
Pour y parvenir, déclarez le constructeur de déplacement comme nosauf, en vous assurant à std::vector pour qu'il ne lèvera pas d'exceptions. Par exemple :
A(A &&rhs) noexcept { // Perform move operations... }
En garantissant le comportement nosauf, std::vector est sûr d'utiliser le constructeur de déplacement sans violer les garanties d'exception.
Vous pouvez également demander explicitement la sémantique de déplacement par défaut en déclarant :
A(A &&rhs) = default;
Cette approche générera automatiquement un constructeur de déplacement nosauf lorsque possible.
Cependant, si le constructeur de déplacement n'est pas nosauf, std::vector ne peut pas l'invoquer car il ne peut pas garantir la sécurité des exceptions selon la norme C.
Notez que les versions antérieures de Visual Studio Les versions 2015 et antérieures peuvent ne pas prendre entièrement en charge cette approche malgré la prise en charge de la sémantique de déplacement.
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!