Maison > développement back-end > C++ > Comment puis-je partager en toute sécurité une référence à « ceci » avec des objets enfants à l'aide de « std::shared_ptr » ?

Comment puis-je partager en toute sécurité une référence à « ceci » avec des objets enfants à l'aide de « std::shared_ptr » ?

Barbara Streisand
Libérer: 2024-10-29 11:46:30
original
397 Les gens l'ont consulté

How Can I Safely Share a Reference to

std::shared_ptr de "cette" énigme

Dans le domaine des pointeurs intelligents, vous pouvez rencontrer un scénario dans lequel un objet de classe A, le parent, a besoin de partager une référence à lui-même avec son enfant, objet de classe B. Cependant, passer un simple pointeur vers "this" peut entraîner une erreur absurde.

La solution réside dans l'énigmatique std::enable_shared_from_this outil. Hériter de cette classe vous permet d'accéder à .shared_from_this() au sein de la classe, vous accordant ainsi une propriété partagée de l'objet actuel.

Néanmoins, une mise en garde cruciale émerge de cette interconnectivité : le potentiel de dépendances circulaires. Pour éviter les pièges des fuites de ressources, il est sage d'introduire std::weak_ptr lors de la création de telles dépendances.

En adoptant cette approche révisée, votre code révisé pourrait ressembler à ce qui suit :

<code class="cpp">class A : public std::enable_shared_from_this<A>
{
public:
    void addChild(std::shared_ptr<B> child)
    {
        children.push_back(child);
        child->setParent(shared_from_this()); // Corrected reference passing
    }

private:
    std::list<std::weak_ptr<B>> children; // Using weak_ptr to prevent circular references
};

class B
{
public:
    void setParent(std::shared_ptr<A> parent)
    {
        this->parent = parent;
    }

private:
    std::shared_ptr<A> parent;
};</code>
Copier après la connexion

Gardez à l'esprit que l'appel de .shared_from_this() nécessite la propriété de l'objet par un std::shared_ptr au moment de l'invocation. Cela élimine la possibilité d'objets alloués par la pile et restreint généralement les appels à .shared_from_this() depuis les constructeurs ou les destructeurs.

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