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>
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!