Atualmente, estou tentando aprender como usar ponteiros inteligentes. No entanto, ao fazer alguns experimentos, descobri a seguinte situação para a qual não consegui encontrar uma solução satisfatória:
Imagine que você tenha um objeto da classe A sendo pai de um objeto da classe B (o filho), mas ambos deveriam se conhecer:
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;
};
A questão é como um objeto da classe A pode passar um std::shared_ptr
de si mesmo ( this
) para seu filho?
Existem soluções para ponteiros compartilhados do Boost ( Obtendo um boost::shared_ptr
parathis
), mas como lidar com isso usando std::
ponteiros inteligentes?