繁体   English   中英

C++ 指针的行为不符合预期

[英]C++ Pointer does not behave as expected

假设我有一个类似的课程。

class Actor {
public:
    add()
    {
        auto tmp = std::make_shared<actor>();
        actorListPtr.push_back(tmp);
    }

    static std::vector<shared_ptr<Actor>> & actorListPtr;
}

我希望通过这个链接到一个单独的向量,一个对类的每个单独实例具有相同行为的向量,从另一个来源引用。 在源中所做的任何更改都将反映在其指针上,反之亦然。 例如。

std::vector<shared_ptr<Actor>> actorList;
Actor::actorListPtr = actorList;

Actor guy;
guy.add();

应该使actorListPtr的内容等于actorList 然而,对我来说,情况并非如此。 我错过了什么?

std::make_shared<Actor>()创建一个新的Actor ,但你可能想要this 在任何情况下,您都不能为已经拥有所有者的任意、预先存在的对象创建拥有者shared_ptr 试试吧:

class Actor {
public:
    static Actor & make()
    {
        auto tmp = std::make_shared<Actor>();
        actorListPtr.push_back(tmp);
        return * tmp;
    }

    static std::vector<shared_ptr<Actor>> & actorListPtr;
}

Actor & guy = Actor::make();

我希望通过这个链接到一个单独的向量,一个对类的每个单独实例具有相同行为的向量,从另一个来源引用。 在源中所做的任何更改都将反映在其指针上,反之亦然。

您似乎正在研究高级 C++ 主题。 有一个设计模式。 这叫做依赖注入

这是使其工作的一种方法。

class Actor {
   public:
      void add()
      {
         auto tmp = std::make_shared<Actor>();
         if ( actorListPtr )
         {
            actorListPtr->push_back(tmp);
         }
      }

      // Allow client code to inject a pointer to be used on subsequent
      // calls to add().
      static void setActorList(std::vector<std::shared_ptr<Actor>>* newActorListPtr)
      {
         actorListPtr = newActorListPtr;
      }

   private:
      static std::vector<std::shared_ptr<Actor>>* actorListPtr;
}

// The static member variable is initialized to nullptr.
// Client code sets the value.
std::vector<std::shared_ptr<Actor>>* Actor::actorListPtr = nullptr;

// Client code.

std::vector<shared_ptr<Actor>> actorList;
Actor::setActorList(&actorList);

Actor guy;
guy.add();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM