C ++全局对象丢失值

时间:2017-07-26 14:00:40

标签: c++

我有一个名为Player_Sprite的类。我已经像这样全局声明了它的一个实例:

Header:
      shared_ptr <Player_Sprite> MainPlayer;

CPP:
      shared_ptr <Player_Sprite> MainPlayer = make_shared<Player_Sprite>();

我试过了:

Player_Sprite player = (*MainPlayer);
//Do more here

我注意到我将丢失以前用播放器设置的值。

Player.SetState(Moving); //Example
然而,

球员将失去他的状态并且仍然处于停止状态。

但是,如果不使用 - &gt;,请参考此Player_Sprite实例。这不仅仅是复制它,让我想知道我的价值观去了哪里?

2 个答案:

答案 0 :(得分:3)

只需使用shared_ptr,就像它是普通指针一样:

MainPlayer->SetState(Moving);

这就是它的用途。

Player_Sprite player = (*MainPlayer);

只会取消引用播放器并制作副本。如果您更改副本,原件当然不会改变。

答案 1 :(得分:1)

.Name将获取Player_Sprite player = (*MainPlayer);的价值副本。这会导致您失去价值&#34;。

请改用*MainPlayerPlayer->SetState(Moving);对指向成员运算符std::shared_ptr的指针有一个聪明的重载,这意味着你可以像使用裸指针那样使用它。

如果您可以将案例约定更改为更标准的内容,那就更好了,因此您可以编写更具可读性的

->