我遇到了共享指针堆栈的问题。
GameState.hpp:
class GameState : std::enable_shared_from_this<GameState>
{
public:
virtual void update(float delta) = 0;
virtual void render() = 0;
virtual void handleInput() = 0;
protected:
Game* mGame;
StatesManager.hpp:
class StatesManager
{
public:
StatesManager();
~StatesManager();
void pushState(std::shared_ptr<GameState> state);
void changeState(std::shared_ptr<GameState> state);
void popState();
std::shared_ptr<GameState> peekState();
private:
std::stack<std::shared_ptr<GameState> > mStates;
};
这是我试图插入的方式:
statesManager.pushState(new StateSplash(this));
但这给了我这个错误:
no suitable constructor exists to convert from "StateSplash *" to "std::shared_ptr<GameState>"
将对象插入 std::shared_ptrs 的 std::stack 的正确方法是什么? 我想使用它们,因为它提供了我需要的“垃圾收集器”,因为如果我在对象是类似 C 的指针时从堆栈中弹出元素,它不会调用析构函数。
最佳答案
假设StateSplash
是GameState
的 child .
您的方法接受 std::shared_ptr
并且您正在尝试将普通指针传递给它。您的编译器不知道如何从 StateSplash *
获取至std::shared_ptr<GameStage>
.
你必须构造一个 std::shared_ptr
通过任一
statesManager.pushState(std::make_shared<GameState>(this));
或
statesManager.pushState(std::shared_ptr<GameState>(new StateSplash(this)));
关于C++ - 如何将对象推送到 std::shared_ptr 的 std::stack ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36253042/