Maison >développement back-end >C++ >Comment utiliser des suppresseurs personnalisés avec les variables membres `std::unique_ptr` ? ```

Comment utiliser des suppresseurs personnalisés avec les variables membres `std::unique_ptr` ? ```

Barbara Streisand
Barbara Streisandoriginal
2024-12-15 17:07:11753parcourir

How to Use Custom Deleters with `std::unique_ptr` Member Variables?
```

Utilisation de suppresseurs personnalisés avec les variables membres std::unique_ptr

Lorsque vous travaillez avec des classes tierces qui nécessitent un mécanisme de suppression spécifique, vous pouvez rencontrer des scénarios dans lesquels vous devez utilisez un suppresseur personnalisé avec les variables membres std::unique_ptr. Cet article fournit une solution pour y parvenir.

Problème

Imaginez que vous ayez une classe Foo avec une variable membre de type std::unique_ptr. Dans ce scénario, la classe tierce Bar dispose d'une fonction create() et destroy() dédiée pour la création et la destruction d'objets.

Exemple de fonction autonome

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

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

Utilisation de suppresseurs personnalisés avec des variables membres

Pour réaliser la même fonctionnalité lorsque vous travaillez avec des variables membres, voici la solution :

class Foo {

    std::unique_ptr<Bar, void(*)(Bar*)> ptr_;

    // ...

public:

    Foo() : ptr_(create(), destroy) { /* ... */ }

    // ...
};

Dans ce code :

  • La variable membre ptr_ est déclarée comme unique_ptr de type Bar.
  • Le suppresseur personnalisé est spécifié comme deuxième paramètre du modèle, qui est un pointeur de fonction avec la signature void(*)(Bar*).
  • Le constructeur de classe initialise ptr_ en utilisant les fonctions create() et destroy() comme suppresseur.

Cette approche vous permet d'utiliser des des suppresseurs pour les variables membres std::unique_ptr de manière pratique, garantissant une bonne gestion des ressources, même pour les classes tierces.

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