@Jean-Marc.Bourguet: Je suis d'accord avec ce que tu dis. En allant plus loin, on ne pourrait pas imaginer quelque chose comme :
Qui permettrait de fonctionner avec n'importe quel objet proposant un release (*) retournant un truc qui va bien, ce qui "sémantiquement" correspondrait à n'importe quel objet qui a une responsabilité qu'il peut effectivement transférer (**) ? Ainsi on pourrait avoir un fonctionnement avec des classes SmartPtr plus perso.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 template<class T> struct MyClass { std::unique_ptr<T> ptr; template<class OwnerPtr> MyClass(OwnerPtr&& ptr) : ptr(ptr.release()) { } };
(*) Idéalement je préférerais une fonction libre, pour l'extensibilité.
(**) Le code ici n'est que partiel, il faut rajouter des check sur le OwnerPtr déduit, entre autre qu'il ne soit pas déduit à un type référence (sinon la responsabilité sera transféré systématiquement) et idéalement checker explicitement un concept (C++14/C++17).
Partager