簡體   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