Forum de la communauté SFML

Général => Suggestions de nouvelles fonctionnalités => Discussion démarrée par: lezebulon le Mai 17, 2012, 03:04:41 am

Titre: sf::Image et constructeur par déplacement
Posté par: lezebulon 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
Titre: Re : sf::Image et constructeur par déplacement
Posté par: Laurent le Mai 17, 2012, 10:16:03 am
https://github.com/SFML/SFML/issues/129
Titre: Re : sf::Image et constructeur par déplacement
Posté par: Orwel 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.
Titre: Re : sf::Image et constructeur par déplacement
Posté par: lezebulon 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
Titre: Re : sf::Image et constructeur par déplacement
Posté par: Laurent 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.