Maison >développement back-end >C++ >Comment puis-je utiliser un suppresseur personnalisé avec une variable membre `std::unique_ptr` ?

Comment puis-je utiliser un suppresseur personnalisé avec une variable membre `std::unique_ptr` ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-18 12:22:10519parcourir

How Can I Use a Custom Deleter with a `std::unique_ptr` Member Variable?

Utilisation d'un suppresseur personnalisé avec un membre std::unique_ptr

Lorsque vous travaillez avec un membre std::unique_ptr dans une classe, il existe des cas où un suppresseur personnalisé peut être requis. Ceci est particulièrement pertinent lorsque l'objet membre nécessite des procédures de nettoyage ou de destruction spécifiques.

Considérons un scénario dans lequel votre classe a un membre std::unique_ptr et Bar est une classe tierce avec sa propre classe create () et fonctions destroy(). Pour gérer la propriété unique de ce membre, un suppresseur personnalisé peut être implémenté.

Dans une fonction autonome, vous pouvez utiliser un std::unique_ptr avec un suppresseur personnalisé comme ceci :

void foo() {
    std::unique_ptr<Bar, void(*)(Bar*)> bar(create(), [](Bar* b) { destroy(b); });
    ...
}

Maintenant, adaptons cette approche à une situation où std::unique_ptr est utilisé en tant que membre dans une classe appelée Foo :

class Foo {
private:
    std::unique_ptr<Bar, void(*)(Bar*)> bar_;
    ...
public:
    Foo() : bar_(create(), destroy) { /* ... */ }
    // ...
};

Notez qu'aucun suppresseur lambda ou personnalisé n'est nécessaire dans cette implémentation car destroy lui-même sert de suppresseur. Cela permet de gérer de manière claire et concise la propriété unique du membre du barreau tout en utilisant sa procédure de destruction personnalisée.

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