Maison >développement back-end >C++ >Pourquoi `std::make_unique` est-il manquant dans C 11 et comment fonctionne le transfert parfait dans son implémentation ?
Q : Pourquoi la fonction centralisée make_unique manque-t-elle dans la bibliothèque standard C 11 ?
Beaucoup trouvent le passe-partout de construction pour pointeurs uniques peu pratiques. Par exemple :
std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3));
Une fonction élégante comme celle-ci serait préférée :
auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3);
Q : Voici une tentative d'implémentation de make_unique, mais quelque chose à propos de std::forward semble cassé. Que fait-il et comment est-il censé être utilisé ?
template<typename T, typename... Args> std::unique_ptr<T> make_unique(Args&&... args) { return std::unique_ptr<T>(new T(std::forward<Args>(args)...)); }
R : L'omission de std::make_unique dans C 11 a été reconnue comme un oubli : il a été ajouté dans C 14.
L'expression std::forward
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!