Je suis avec white_tentacle ici. unique_ptr<> en paramètre est fait partie de l'interface, mais peut n'avoir rien à voir avec l'implémentation, qui pourrait par exemple passer le pointeur (et son ownership) à une bibliothèque legacy don't l'interface est en C.
unique_ptr en paramètre n'expose rien de l'implémentation, seulement le contrat que l'utilisateur n'est plus responsable de gérer la durée de vie de l'objet.
Et cela n'est pas "exposer l'implémentation", c'est quelque chose d'aussi nécessaire qu'une garantie qu'une fonction ne modifie pas un autre objet, ou une garantie de thread-safety...

Envoyé par
white_tentacle

Envoyé par
koala01
Et où espères tu le voir, ton move?
Je pense que le move peut être invisible dans des cas où une fonction retourne déjà un unique_ptr rvalue:
obj.SetFoo(CreateFoo()); //Pas de std::move
mais dans ce cas précis je ne pense pas que ce soit un problème.
Partager