Maison > développement back-end > C++ > Comment puis-je utiliser des suppresseurs personnalisés avec des membres std::unique_ptr dans une classe C ?

Comment puis-je utiliser des suppresseurs personnalisés avec des membres std::unique_ptr dans une classe C ?

Susan Sarandon
Libérer: 2024-12-08 12:16:11
original
735 Les gens l'ont consulté

How Can I Use Custom Deleters with std::unique_ptr Members in a C   Class?

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 membre. La classe Bar provient d'une bibliothèque tierce et définit ses propres fonctions create() et destroy() pour l'instanciation et la destruction d'objets.

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); });
    ...
}
Copier après la connexion

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*);
Copier après la connexion

Vous pouvez définir votre classe Foo comme suit :

class Foo {

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

    // ...

public:

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

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

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!

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