std :: shared_ptr этого
В настоящее время я пытаюсь научиться использовать умные указатели. Однако, проводя некоторые эксперименты, я обнаружил следующую ситуацию, для которой я не смог найти решение, удовлетворяющее требованиям:
Представьте, что у вас есть объект класса A, являющийся родительским для объекта класса B (дочерний), но оба должны знать друг друга:
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;
};
Вопрос в том, как объект класса А может пройтиstd::shared_ptr
само по себе (this
) своему ребенку?
Есть решения для общих указателей Boost (Получениеboost::shared_ptr
for this
), но как справиться с этим, используяstd::
умные указатели?