Maison > développement back-end > C++ > le corps du texte

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

Linda Hamilton
Libérer: 2024-10-30 00:03:29
original
684 Les gens l'ont consulté

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)...));
}
Copier après la connexion

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)...));
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!