[英]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.