gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 01:36:03 25 4
gpt4 key购买 nike

共享指针堆栈有问题。

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

最佳答案

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com