【发布时间】:2013-02-10 19:17:54
【问题描述】:
对于这个游戏,我有一个 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 的访问规则...
【问题讨论】:
标签: c++ memory-management c++11 lambda anonymous-function