Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: sf::Image et constructeur par déplacement  (Lu 2781 fois)

0 Membres et 1 Invité sur ce sujet

lezebulon

  • Full Member
  • ***
  • Messages: 235
    • Voir le profil
sf::Image et constructeur par déplacement
« le: Mai 17, 2012, 03:04:41 am »
Salut
Est-ce qu'il est prévu d'implémenter un jour
sf::Image& sf::Image::operator=(sf::Image&& rhs)
?

Je pense que ça ferait gagner pas mal de perfs dans certains cas non? J'aillais proposer la même chose la même chose pour sf::Texture mais je sais pas si ça ferait gagner grand chose (enfin j'ai pas encore vu comment c'était implémenté).

Après c'est sûr que les compilo C++11 sont pas encore légion...


edit : pareil pour sf::Texture en fait, ça éviterait un appel à
LoadFromImage(copy.CopyToImage());
dans le constructeur
« Modifié: Mai 17, 2012, 10:16:13 am par Laurent »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Laurent Gomila - SFML developer

Orwel

  • Full Member
  • ***
  • Messages: 208
    • Voir le profil
Re : sf::Image et constructeur par déplacement
« Réponse #2 le: Mai 17, 2012, 01:19:06 pm »
Peux-tu expliquer au néophyte que je suis l’avantage que cela apporte??? ;)

sf::Image& sf::Image::operator=(sf::Image&& rhs)
Une référence d'une référence....Es-ce une nouvelle utilisation de l'opérateur = en C++11???
Sinon, peut-être rajouter un const si il s'agit bien de la copie d'un objet.

lezebulon

  • Full Member
  • ***
  • Messages: 235
    • Voir le profil
Re : sf::Image et constructeur par déplacement
« Réponse #3 le: Mai 17, 2012, 03:23:35 pm »
Je t'invite à regarder sur le web ce qui a un rapport avec le mot clé "move semantics" et "rvalue reference" car ça devient assez compliqué assez vite  :D
Mais en gros l'idée est que quand par exemple tu tries un std::vector, les objets peuvent être déplacés, càd que au lieu de faire une copie + destruction de l'ancien, tu déplace juste l'ancien vers un nouvel emplacement mémoire.
C'est plutôt pas mal utile pour sf::image par exemple parce que si tu déplaces une image tu n'as pas en théorie à recopier le tableau de pixel qui compose l'image, vu qu'il est référencé par pointeur tu peux juste réassigner le pointeur à la nouvelle image

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : sf::Image et constructeur par déplacement
« Réponse #4 le: Mai 17, 2012, 03:43:24 pm »
Il vaut mieux lire l'un des nombreux articles dédiés en effet, mais de manière très résumée : les r-value references permettent d'optimiser l'utilisation de ce que l'on appelle les temporaires non-nommés. Comme ces variables sont volatiles et non stockées, cela permet de voler leur contenu plutôt que de le copier. Ce qui, par exemple pour std::vector, permet de créer une copie avec 3 affectations de pointeurs plutôt qu'une grosse réallocation de mémoire + une copie de tous les objets.
Laurent Gomila - SFML developer