Shared_ptr似乎适用于复制,而不适用于原始对象

时间:2018-01-07 23:19:57

标签: c++11 smart-pointers

我有两个代表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::Playerview::GameState中创建,只是像这样初始化 m_playerOneView.create(m_game.getActivePlayer());

m_gamelogic::Game对象

logic::Gamestd::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呢?

0 个答案:

没有答案