Attualmente sto cercando di imparare a utilizzare i puntatori intelligenti. Tuttavia durante alcuni esperimenti ho scoperto la seguente situazione per la quale non sono riuscito a trovare una soluzione soddisfacente:
Immagina di avere un oggetto di classe A che è genitore di un oggetto di classe B (il bambino), ma entrambi dovrebbero conoscersi:
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 domanda è: come può un oggetto di classe A passare un std::shared_ptr
di se stesso ( this
) a suo figlio?
Esistono soluzioni per Boost shared pointers ( Getting a boost::shared_ptr
forthis
), ma come gestirlo utilizzando i std::
puntatori intelligenti?