Maison >développement back-end >C++ >Comment `std::make_unique` réalise-t-il un transfert parfait en C ?
En C 11, il n'y a pas de fonction std::make_unique intégrée, qui permettrait une instanciation concise de pointeurs uniques. Les développeurs ont trouvé la syntaxe
std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3));
inutilement verbeuse et ont proposé une syntaxe alternative :
auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3);
Cette approche simplifie la création de pointeurs uniques et réduit la duplication de code.
L'implémentation proposée de std::make_unique utilise le transfert parfait via std::forward pour transmettre les arguments au constructeur. Le transfert parfait garantit que les paramètres de fonction sont transmis de la manière la plus efficace possible, en préservant leur type et leur catégorie de valeur d'origine (par exemple, lvalues, rvalues).
Dans l'implémentation make_unique, la syntaxe
std::forward<Args>(args)...
peut être interprété comme suit :
Ensemble, ils réalisent une transmission parfaite en s'assurer que les arguments sont transmis au constructeur avec la catégorie et le type de valeur corrects.
Herb Sutter, président du comité de normalisation C, a reconnu l'oubli de ne pas inclure std::make_unique dans C 11 et a indiqué qu'il sera ajouté dans une future version. L'implémentation suggérée est identique à celle fournie dans la question.
Avec l'introduction de C 14, std::make_unique a été standardisé, fournissant la syntaxe concise demandée pour créer des pointeurs uniques.
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!