Maison > développement back-end > C++ > Comment utiliser des suppresseurs personnalisés avec les membres de la classe « std :: unique_ptr » ?

Comment utiliser des suppresseurs personnalisés avec les membres de la classe « std :: unique_ptr » ?

Patricia Arquette
Libérer: 2024-12-06 07:00:11
original
922 Les gens l'ont consulté

How to Use Custom Deleters with `std::unique_ptr` Class Members?

Utilisation de suppresseurs personnalisés avec des membres std::unique_ptr

En programmation, l'utilisation d'un suppresseur personnalisé avec un membre std::unique_ptr peut offrir une plus grande contrôle de la destruction des objets. Cet article vise à répondre à la question de savoir comment incorporer un suppresseur personnalisé dans une structure de classe.

Considérons un scénario dans lequel une classe, Foo, contient un membre de type std::unique_ptr. Bar est une classe tierce qui propose à la fois une fonction create() et destroy(). Lorsque vous travaillez avec std::unique_ptr dans une fonction autonome, la syntaxe suivante peut être utilisée :

void foo() {
    std::unique_ptr<Bar, void(*)(Bar*)> bar(create(), [](Bar* b){ destroy(b); });
}
Copier après la connexion

Cette approche permet de spécifier un suppresseur personnalisé à l'aide d'une expression lambda. La question se pose : existe-t-il un moyen de reproduire ce comportement lorsque std::unique_ptr est utilisé en tant que membre d'une classe ?

Solution : Supprimeur personnalisé pour un membre de classe

En supposant que créer et détruire sont des fonctions gratuites, la solution suivante peut être implémentée :

class Foo {

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

    // ...

public:

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

    // ...
};
Copier après la connexion

Dans ce scénario, le suppresseur personnalisé est fourni directement dans la définition de classe. La fonction destroy est utilisée comme suppresseur, éliminant ainsi le besoin d'une expression lambda. Cette approche garantit que l'objet Bar est correctement détruit lorsque l'objet Foo sort de la porté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!

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