我有一个名为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实例。这不仅仅是复制它,让我想知道我的价值观去了哪里?
答案 0 :(得分:3)
只需使用shared_ptr
,就像它是普通指针一样:
MainPlayer->SetState(Moving);
这就是它的用途。
Player_Sprite player = (*MainPlayer);
只会取消引用播放器并制作副本。如果您更改副本,原件当然不会改变。
答案 1 :(得分:1)
.Name
将获取Player_Sprite player = (*MainPlayer);
的价值副本。这会导致您失去价值&#34;。
请改用*MainPlayer
。 Player->SetState(Moving);
对指向成员运算符std::shared_ptr
的指针有一个聪明的重载,这意味着你可以像使用裸指针那样使用它。
如果您可以将案例约定更改为更标准的内容,那就更好了,因此您可以编写更具可读性的
->