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é ?
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.
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.
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.
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!