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:: умные указатели?

Ответы на вопрос(2)

Ваш ответ на вопрос