J'essaie actuellement d'apprendre à utiliser des pointeurs intelligents. Cependant, en faisant quelques expériences, j'ai découvert la situation suivante pour laquelle je ne pouvais pas trouver de solution satisfaisante:
Imaginez que vous ayez un objet de classe A étant parent d'un objet de classe B (l'enfant), mais que les deux devraient se connaître:
class A;
class B;
class A
{
public:
void addChild(std::shared_ptr<B> child)
{
children->push_back(child);
// How to do pass the pointer correctly?
// child->setParent(this); // wrong
// ^^^^
}
private:
std::list<std::shared_ptr<B>> children;
};
class B
{
public:
setParent(std::shared_ptr<A> parent)
{
this->parent = parent;
};
private:
std::shared_ptr<A> parent;
};
La question est de savoir comment un objet de classe A peut-il passer un std::shared_ptr
de lui-même ( this
) à son enfant?
Il existe des solutions pour les pointeurs partagés Boost ( Obtenir un boost::shared_ptr
forthis
), mais comment gérer cela en utilisant les std::
pointeurs intelligents?