Supprimeurs personnalisés avec membres std::unique_ptr
En C, la classe std::unique_ptr offre un moyen pratique de gérer la propriété du pointeur -objets basés sur. Cependant, si vous travaillez avec des objets tiers qui nécessitent un processus de suppression personnalisé, vous pouvez rencontrer des difficultés lors de l'utilisation de std::unique_ptr en tant que membre d'une classe.
Considérez le scénario suivant : vous disposez d'un classe avec un std::unique_ptr
Pour utiliser std::unique_ptr avec un tel scénario dans une fonction autonome, vous peut utiliser un suppresseur personnalisé :
void foo() { std::unique_ptr<Bar, void (*)(Bar*)> bar(create(), [](Bar* b) { destroy(b); }); ... }
Mais comment pouvez-vous y parvenir lorsque le std::unique_ptr est membre d'un classe ?
Supprimeurs personnalisés dans les membres de la classe
En supposant que créer et détruire sont des fonctions gratuites avec les signatures suivantes :
Bar* create(); void destroy(Bar*);
Vous pouvez définir votre classe Foo comme suit :
class Foo { std::unique_ptr<Bar, void (*)(Bar*)> ptr_; // ... public: Foo() : ptr_(create(), destroy) { /* ... */ } // ... };
Dans cette implémentation, vous fournissez directement la fonction destroy en tant que suppresseur pour le std :: unique_ptr. En utilisant une fonction gratuite comme suppresseur, vous évitez le besoin de lambdas ou de classes de suppression personnalisées.
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!