Maison  >  Article  >  développement back-end  >  Comment implémenter « make_unique » dans C 11 pour une gestion améliorée de la propriété ?

Comment implémenter « make_unique » dans C 11 pour une gestion améliorée de la propriété ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-30 09:32:27374parcourir

How to Implement `make_unique` in C  11 for Enhanced Ownership Management?

Implémentation personnalisée de make_unique en C 11

make_unique est une fonction utilitaire introduite en C 14 pour créer un objet unique_ptr avec une instance allouée dynamiquement . Ceci est utile lorsqu'un pointeur brut n'est pas souhaité et qu'une gestion de la propriété est nécessaire. Cependant, si votre compilateur ne prend pas en charge make_unique, il peut être facilement implémenté à l'aide d'une fonction de modèle personnalisée.

Pour écrire make_unique, la déclaration de modèle suivante est utilisée :

<code class="cpp">template< class T, class... Args >
unique_ptr<T> make_unique( Args&&... args );</code>

Ce modèle prend un type T et un nombre variable d'arguments Args. L'implémentation suivante crée un objet unique_ptr avec une nouvelle instance T construite à l'aide des arguments fournis :

<code class="cpp">template<typename T, typename... Args>
std::unique_ptr<T> make_unique(Args&&... args)
{
    return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}</code>

Le std::forward la syntaxe est utilisée pour assurer une transmission parfaite des arguments au constructeur. En appelant std::forward, les règles de réduction des références ne sont pas appliquées et les références lvalue ou rvalue sont préservées.

Cette implémentation personnalisée de make_unique imite le comportement de la version standard, vous permettant de créer des objets unique_ptr en C 11 environnements où make_unique n'est pas pris en charge.

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