【发布时间】:2016-07-15 03:55:22
【问题描述】:
我遇到了共享指针堆栈的问题。
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 指针时从堆栈中弹出元素,它不会调用析构函数。
【问题讨论】:
-
statesManager.pushState(std::shared_ptr<GameState>(new StateSplash(this))); -
@IgorTandetnik 您应该发布答案并解释为什么明确ly ;),而不是发表评论。
标签: c++ stack shared-ptr