Actualmente estoy tratando de aprender a usar punteros inteligentes. Sin embargo, mientras hacía algunos experimentos, descubrí la siguiente situación para la que no pude encontrar una solución satisfactoria:
Imagina que tienes un objeto de clase A que es padre de un objeto de clase B (el hijo), pero ambos deberían conocerse:
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 pregunta es ¿cómo puede un objeto de clase A pasar un std::shared_ptr
de sí mismo ( this
) a su hijo?
Hay soluciones para los punteros compartidos de Boost ( obteniendo un boost::shared_ptr
parathis
), pero ¿cómo manejar esto usando los std::
punteros inteligentes?