作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
共享指针堆栈有问题。
游戏状态.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;
状态管理器.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_ptr 的 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/
我是一名优秀的程序员,十分优秀!