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.
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é.
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.
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)...)); }
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!