我有两个代表Player的类,我想在其中一个指针中指向另一个。
因此,在view::Player
内,我创建了指向logic::Player
namespace view {
class Player {
std::shared_ptr<logic::Player> m_player;
//logic::Player* m_player;
public:
void create(logic::Player& player) {
m_player = std::make_shared<logic::Player>(player);
//m_player = &player;
}
};
}
view::Player
在view::GameState
中创建,只是像这样初始化
m_playerOneView.create(m_game.getActivePlayer());
m_game
是logic::Game
对象
logic::Game
有std::vector<logic::Player>
,公共方法返回活动
logic::Player& logic::Game::getActivePlayer() {
return m_players[m_activePlayer];
}
并且终极
namespace logic {
class Player {
std::string m_name;
int position;
};
}
现在我需要在logic::Player
课程中std::shared_ptr
指向view::Player
的原始对象。我可以通过将其更改为原始指针来实现这一点,然后它可以正常工作(2条注释行执行我想要基本实现的功能)。但是当我尝试在std::shared_ptr
上执行此操作时,我似乎正在处理logic::Player
的副本,因为当我更新其位置时,它会在游戏中的所有位置发生变化,但不会在view::Player
中发生变化。如何使用std::shared_ptr
呢?