C+中的单例实现+;调用getInstance函数时不产生相同的类实例 目前我正在用C++进行游戏。当游戏开始时,我会打电话给你 class Game { public: static Game *getGameInstance(); ~Game(); private: Game(); static Game *gameContainer; };

C+中的单例实现+;调用getInstance函数时不产生相同的类实例 目前我正在用C++进行游戏。当游戏开始时,我会打电话给你 class Game { public: static Game *getGameInstance(); ~Game(); private: Game(); static Game *gameContainer; };,c++,singleton,C++,Singleton,这将创建一个“新游戏”,游戏将正常启动。不过,我现在有了一个从代码的另一部分调用GetGameInstance的用例。问题是,然后我再次调用getGameInstance函数(Game*Game=Game::getGameInstance();),但gameContainer被视为nullptr并创建第二个游戏实例。我不确定到底出了什么问题,因为我的课看起来很正常 。。。这将创建一个“新游戏”,游戏将正常启动 因此,您正在从游戏构造函数内部启动游戏。 我假设您的内部有某种循环,这意味着您的构造函

这将创建一个“新游戏”,游戏将正常启动。不过,我现在有了一个从代码的另一部分调用GetGameInstance的用例。问题是,然后我再次调用getGameInstance函数(Game*Game=Game::getGameInstance();),但gameContainer被视为nullptr并创建第二个游戏实例。我不确定到底出了什么问题,因为我的课看起来很正常

。。。这将创建一个“新游戏”,游戏将正常启动

因此,您正在从
游戏
构造函数内部启动游戏。
我假设您的内部有某种循环,这意味着您的构造函数将永远不会返回

因此,静态实例的分配永远不会发生。
这就是为什么在后续调用中它仍然是
nullptr

您应该创建
游戏
对象,分配实例,然后启动游戏:

Game *Game::getGameInstance()
{
    if(gameContainer == nullptr)
    {
        gameContainer = new Game;
    }
    return gameContainer;
}
注意,最好不要从getInstance方法内部开始游戏。

改为从外部执行。

您发布的代码没有问题。第二次调用是否发生在游戏构造函数调用的函数内部?游戏构造函数是否会返回?如果没有第二次调用的更多信息,我认为我们无法重现您的问题。也许试着在你的课堂上做一个小例子并测试它,是否有效?@macmade你已经弄明白了,谢谢-我的游戏类在进入游戏循环时永远不会返回,所以当我再次调用该函数时,对象仍然是非活动的existent@JozefMilenkiewicz构造函数除了创建对象之外,不应该做任何事情-它甚至不是一个有效的,完全构造的对象,直到构造函数返回为止。任何依赖于对象存在的东西都属于成员函数。我不建议这样做。因为函数名是getGameInstance,所以不是get_和_start_GameInstance。从外部代码调用start是很清楚的。是的,我犹豫是否要添加一个关于此的注释。。。编辑答案以包含此内容。
Game *Game::getGameInstance()
{
    if(gameContainer == nullptr)
    {
        gameContainer = new Game;
        game->start();
    }

    return gameContainer;
}