Maison  >  Article  >  développement back-end  >  Comment implémenter une fonction `make_unique` personnalisée en C 11 ?

Comment implémenter une fonction `make_unique` personnalisée en C 11 ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-30 00:03:29684parcourir

How to Implement a Custom `make_unique` Function in C  11?

Création d'une implémentation personnalisée de make_unique en C 11

La fonction make_unique est une méthode pratique pour créer et gérer des pointeurs uniques en C . Il permet aux programmeurs de transmettre des arguments directement au constructeur de l'objet pointé tout en garantissant que la propriété est correctement transférée. Cependant, certains compilateurs peuvent ne pas prendre en charge make_unique de manière native. Dans de tels cas, il devient nécessaire d'implémenter une version personnalisée de la fonction.

Fonction make_unique personnalisée

Pour implémenter une fonction make_unique personnalisée, vous pouvez utiliser l'extrait de code suivant :

template<typename T, typename... Args>
std::unique_ptr<T> make_unique(Args&&... args)
{
    return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}

Cette implémentation personnalisée utilise unique_ptr et new de la bibliothèque standard pour créer un pointeur unique. Il transmet les arguments au constructeur de l'objet pointé à l'aide de std::forward, garantissant un transfert de valeur approprié.

Comparaison avec l'implémentation native

La fonction make_unique personnalisée fonctionne de la même manière que la version native. Cependant, cela peut présenter certaines limites dans des scénarios spécifiques. Il convient de noter que la fonction native make_unique ajoutée dans C 14 résout certains cas extrêmes et optimisations qui peuvent ne pas être présentes dans l'implémentation personnalisée.

Implémentation personnalisée alternative

Une implémentation personnalisée alternative, qui offre plus de polyvalence et gère les tableaux, peut être trouvé dans la réponse acceptée par sasha.sochka sur Stack Overflow :

template <typename T>
std::unique_ptr<T> make_unique(T* ptr) {
  return std::unique_ptr<T>(ptr);
}

template <typename T, typename... Args>
std::unique_ptr<T> make_unique(Args&&... args) {
  return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}

Conclusion

En utilisant les extraits de code fournis, vous pouvez implémenter un Fonction make_unique en C 11. Bien que l'implémentation native soit préférable si elle est prise en charge par votre compilateur, les versions personnalisées discutées ici offrent une solution viable lorsque nécessaire.

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