2 votes

Quelles fonctions std appellent la version implémentée par l'utilisateur de la fonction swap?

Pour décider s'il est judicieux de prendre en charge une version personnalisée de swap à l'ère post-C+11x, je voulais savoir quelles fonctions std appellent swap et est-ce qu'elles bénéficieront toujours d'une version implémentée par l'utilisateur même en présence d'un move-constructeur et d'une move-assignment ?

2voto

Je ne pense pas que la bibliothèque standard appellera votre fonction swap,

La bibliothèque standard appellera votre implémentation de swap dans les endroits où elle requiert que le type soit échangeable, par exemple dans l'implémentation de std::pair<>::swap. En plus de cela, d'autres codes pourraient également utiliser votre swap pour implémenter leur propre fonction swap. Pour ces cas, si vous avez implémenté le constructeur de déplacement et l'assignation de déplacement, l'implémentation standard de std::swap devrait mais n'est pas obligée (AFAIK) d'utiliser le constructeur/assignation de déplacement.

L'implémentation de swap pour un type qui implémente déjà les opérations de déplacement est une fonction de trois lignes, donc je vous conseille de l'implémenter de toute façon :

void swap(mytype& lhs, mytype& rhs) {
   mytype tmp(std::move(lhs));
   lhs = std::move(rhs);
   rhs = std::move(tmp);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X