对于这个游戏,我有一个 Game 类,它是一个单例......这是头文件
#ifndef SOKOBAN_GAME_H
#define SOKOBAN_GAME_H
#include <memory>
#include <SDL/SDL.h>
namespace sokoban
{
class Game
{
public:
static Game* getInstance();
void startGame();
private:
Game();
~Game();
Game(const Game&) = delete;
Game(Game&&) = delete;
Game& operator=(const Game&) = delete;
Game& operator=(Game&&) = delete;
static std::shared_ptr<Game> instance_;
SDL_Surface* mainSurface_;
};
};
#endif
现在,除了 getInstance 函数之外,大部分实现文件都不重要了:
Game* Game::getInstance()
{
if(!Game::instance_)
{
Game::instance_ = std::shared_ptr<Game>(new Game,
[](Game* ptr)
{
delete ptr;
});
}
return Game::instance_.get();
}
如您所见,我的惰性初始化样式要求我使用智能指针,但是因为我试图避免使用公共析构函数,所以我必须使用 lambda 作为删除器,现在这段代码编译得很好,但是我不能似乎找到了为什么标准所说的 lambda 是一个单独的唯一对象的任何模式,可以调用这个私有方法,特别是在查看了一些关于 SO 的问题之后,例如:
我基本上想知道的是成员函数中 lambda 的访问规则,例如示例...