Maison > développement back-end > C++ > Pourquoi `std::make_unique` est-il un ajout précieux au C malgré sa complexité ?

Pourquoi `std::make_unique` est-il un ajout précieux au C malgré sa complexité ?

DDD
Libérer: 2024-12-16 06:06:16
original
628 Les gens l'ont consulté

Why is `std::make_unique` a valuable addition to C   despite its complexity?

std::make_unique : une commodité de bibliothèque standard manquante

La bibliothèque standard C 11 n'a pas de modèle de fonction std::make_unique, ce qui laisse les développeurs écrire du code détaillé pour créer pointeurs uniques. Prenons l'exemple suivant :

std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3));
Copier après la connexion

Pour atténuer cette verbosité, certains développeurs ont proposé une fonction make_unique :

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

Cette syntaxe masque l'opérateur new et ne mentionne le type qu'une seule fois.

Cependant, la mise en œuvre d’une telle fonction nécessite de comprendre les subtilités d’un transfert parfait. Plus précisément, l'expression std::forward:

std::forward<Args>(args)...
Copier après la connexion

implique les opérations suivantes :

  • std::forward est une expression de transformation de type qui transmet toutes les références lvalue ou rvalue d'Args au résultat.
  • std::forward(args) est une expression d'appel de fonction qui déduit et construit Args en transmettant les arguments correspondants dans args.
  • ... décompresse les arguments transmis dans un pack de paramètres.

En résumé, std::forward<Args>(args)... permet une transmission parfaite des arguments aux constructeurs.

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