Maison > développement back-end > C++ > Quand et comment devriez-vous utiliser `enable_shared_from_this` en C ?

Quand et comment devriez-vous utiliser `enable_shared_from_this` en C ?

Linda Hamilton
Libérer: 2024-12-13 10:00:22
original
164 Les gens l'ont consulté

When and How Should You Use `enable_shared_from_this` in C  ?

Comprendre l'importance de activate_shared_from_this

Question :

En explorant les exemples Boost.Asio, de nombreux développeurs rencontrent le concept activate_shared_from_this. Malgré la lecture de la documentation, son application pratique reste floue. Pourriez-vous fournir un exemple et expliquer quand l'utilisation de cette classe est appropriée ?

Réponse :

enable_shared_from_this accorde la possibilité d'obtenir une instance shared_ptr valide pour "this", même dans les situations où seul « ceci » est disponible. En l'absence de cette capacité, obtenir un shared_ptr sur "this" nécessiterait d'en avoir un déjà défini comme membre.

Considérez l'exemple suivant tiré de la documentation de Boost :

class Y: public enable_shared_from_this<Y> {
public:
    shared_ptr<Y> f() {
        return shared_from_this();
    }
};

int main() {
    shared_ptr<Y> p(new Y);
    shared_ptr<Y> q = p->f();
    assert(p == q);
    assert(!(p < q || q < p)); // p and q must share ownership
}
Copier après la connexion

La méthode f() renvoie un shared_ptr valide malgré l'absence d'instance de membre.

Il est important de noter que le simple fait de renvoyer un shared_ptr construit avec "this" comme L'argument n'est pas une solution acceptable, car il entraînerait un décompte de références différent de celui légitime "partagé". Par conséquent, l'un des pointeurs partagés peut se retrouver avec une référence pendante lors de la suppression d'un objet.

enable_shared_from_this fait désormais partie de la norme C 11, le rendant accessible via C 11 et Boost.

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