Ich versuche gerade zu lernen, wie man intelligente Zeiger verwendet. Bei einigen Experimenten entdeckte ich jedoch die folgende Situation, für die ich keine zufriedenstellende Lösung finden konnte:
Stellen Sie sich vor, Sie haben ein Objekt der Klasse A als Eltern eines Objekts der Klasse B (das Kind), aber beide sollten sich kennen:
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;
};
Die Frage ist, wie ein Objekt der Klasse A ein std::shared_ptr
von sich selbst ( this
) an sein Kind weitergeben kann.
Es gibt Lösungen für gemeinsam genutzte Boost-Zeiger ( Getting a boost::shared_ptr
forthis
), aber wie geht man mit den std::
intelligenten Zeigern damit um?