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
583 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!

source:php.cn
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