Maison >développement back-end >C++ >Pourquoi « std::make_unique » était-il absent de C 11 et comment le transfert parfait améliore-t-il sa fonctionnalité ?

Pourquoi « std::make_unique » était-il absent de C 11 et comment le transfert parfait améliore-t-il sa fonctionnalité ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-14 01:33:10941parcourir

Why Was `std::make_unique` Missing from C  11, and How Does Perfect Forwarding Enhance Its Functionality?

make_unique et Perfect Forwarding

Pourquoi pas std::make_unique en C 11 ?

Malgré les avantages de réduire la verbosité et d'aider à la sécurité des types, std::make_unique n'était pas inclus dans la norme C 11. Herb Sutter, président du comité de normalisation C, attribue cette omission à un oubli.

std::forward et Perfect Forwarding expliqués

Dans l'implémentation make_unique définie par l'utilisateur, std::forward< Args>(args)... est utilisé pour transmettre parfaitement les arguments au constructeur de T. Cette technique garantit que les arguments sont transmis comme la valeur r la plus optimale. (ou lvalue).

Lorsque std::forward est appliqué à une référence lvalue, il la convertit en une référence rvalue, permettant au constructeur de se lier directement à une rvalue. À l'inverse, si std::forward est appliqué à une référence rvalue, il ne fait rien.

Détails de l'implémentation

L'implémentation make_unique crée une nouvelle instance de T en allouant de la mémoire avec le nouveau T, puis en appelant son constructeur avec les arguments transmis. L'utilisation du transfert parfait évite les copies inutiles ou les objets temporaires inutiles.

Conclusion

Bien qu'il ne fasse pas partie de C 11, std::make_unique est devenu une convention largement adoptée pour créer de manière concise des pointeurs uniques. Il améliore la lisibilité du code, simplifie la gestion des types et garantit une gestion efficace des ressources. Son inclusion prévue dans C 14 souligne encore son importance dans la programmation C moderne.

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