C++ - 如何将对象推送到 std::shared_ptr 的 std::stack ?

标签 c++ stack shared-ptr

我遇到了共享指针堆栈的问题。

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 的指针时从堆栈中弹出元素,它不会调用析构函数。

最佳答案

假设StateSplashGameState的 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/

相关文章:

静态 LIB 的 C++ 代码混淆

c++ - 如何重载嵌套类的运算符?

C++ 样式 : copyable handle wrapper classes

c++ - 如何从 boost 库中取出单个元素(例如 shared_ptr)?

java - resize() 方法被调用了多少次?

c++ - 使用 boost::timer 作为定期调用的类的成员时,类销毁时出现段错误

c++ - 从PDF中提取第一行文本

c++ - 提升语言环境的特定于语言环境的 to_lower 问题

algorithm - 给定 N 栋建筑物,找到由连续建筑物形成的最大此类实心区域

c++ - C++ 大数快速排序堆栈溢出