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
DDDoriginal
2024-12-16 06:06:16633parcourir

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));

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

auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3);

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)...

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!

Déclaration:
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