Obecnie próbuję nauczyć się korzystać z inteligentnych wskaźników. Jednak podczas niektórych eksperymentów odkryłem następującą sytuację, dla której nie mogłem znaleźć satysfakcjonującego rozwiązania:
Wyobraź sobie, że masz obiekt klasy A będący rodzicem obiektu klasy B (dziecko), ale oboje powinni się znać:
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;
};
Powstaje pytanie, w jaki sposób obiekt klasy A może przekazać std::shared_ptr
siebie ( this
) swojemu dziecku?
Istnieją rozwiązania dotyczące wspólnych wskaźników Boost ( Getting a boost::shared_ptr
forthis
), ale jak sobie z tym poradzić za pomocą std::
inteligentnych wskaźników?