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 ?

Pourquoi `std::make_unique` est-il manquant dans C 11 et comment fonctionne le transfert parfait dans son implémentation ?

DDD
Libérer: 2024-12-30 00:30:12
original
645 Les gens l'ont consulté

Why is `std::make_unique` Missing in C  11, and How Does Perfect Forwarding Work in its Implementation?

Make_unique et Perfect Forwarding

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));
Copier après la connexion

Une fonction élégante comme celle-ci serait préférée :

auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3);
Copier après la connexion

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)...));
}
Copier après la connexion

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(args) utilise une transmission parfaite pour produire une référence artificielle aux arguments ...args, leur permettant de être transmis à la nouvelle expression dans T(std::forward(args)...) et unifier le comportement de construction pour les lvalues ​​et les rvalues.

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal