Maison > développement back-end > C++ > Comment puis-je utiliser des suppresseurs personnalisés avec des membres std::unique_ptr pour les classes tierces ?

Comment puis-je utiliser des suppresseurs personnalisés avec des membres std::unique_ptr pour les classes tierces ?

Patricia Arquette
Libérer: 2024-12-06 03:17:10
original
585 Les gens l'ont consulté

How Can I Use Custom Deleters with std::unique_ptr Members for Third-Party Classes?

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

Dans la programmation orientée objet, il est souvent souhaitable d'utiliser des objets membres gérés par des membres uniques. pointeurs (std::unique_ptr). Cependant, lorsqu'il s'agit de classes tierces qui ont des exigences personnalisées en matière de gestion de la mémoire, l'utilisation d'un suppresseur personnalisé peut s'avérer bénéfique.

Considérez un scénario dans lequel vous avez une classe (Foo) avec un membre géré par un pointeur unique ( std::unique_ptr). La classe tierce (Bar) fournit les fonctions create() et destroy() pour la gestion de la mémoire.

Pour résoudre ce problème, vous pouvez implémenter un suppresseur personnalisé au sein de votre classe Foo, en utilisant une syntaxe similaire à la suivante :

class Foo {
private:
    std::unique_ptr<Bar, void(*)(Bar*)> ptr_;

    // ...

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

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

Dans cet exemple, create() et destroy() sont supposées être des fonctions libres qui adhèrent aux signatures suivantes :

Bar* create();
void destroy(Bar*);
Copier après la connexion

En spécifiant destroy comme deuxième argument de modèle du pointeur unique, vous demandez effectivement au pointeur d'invoquer destroy() lorsque l'objet géré est supprimé.

Cette approche vous permet de gérer de manière transparente la mémoire de votre objet membre tiers tout en conservant les avantages d'utiliser des pointeurs uniques, tels que la désallocation automatique des ressources et la sémantique de propriété.

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