std::shared_ptr de cette

Je suis en train d'essayer d'apprendre à utiliser des pointeurs intelligents. Cependant, tout en faisant quelques expériences, j'ai découvert la situation suivante pour laquelle je ne pouvais pas trouver un satisfait de la solution:

Imaginez que vous avez un objet de la classe Un être parent d'un objet de la classe B (l'enfant), mais les deux devraient connaître les uns les autres:

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 question est de savoir comment un objet de la classe A passer un std::shared_ptr de lui-même (this) à son enfant?

Il existe des solutions pour Stimuler partagé pointeurs (L'obtention d'un boost::shared_ptr par this), mais comment gérer cette aide de la std:: pointeurs intelligents?

  • Comme avec tout autre outil que vous devez utiliser lorsque cela est approprié. À l'aide de pointeurs intelligents pour ce que vous faites n'est pas
  • De même pour la poussée. Voir ici.
  • C'est un problème à ce niveau d'abstraction. Vous ne savez même pas que "ce" indique la mémoire sur le tas.
  • Eh bien, la langue n'a pas, mais vous ne. Tant que vous gardez une trace de ce qui est là, vous serez très bien.
InformationsquelleAutor Icarus | 2012-07-29