用于初始化实例的单例

时间:2013-06-01 09:50:17

标签: c++ singleton instance

我正在阅读,我在下面的例子中有疑问。

SINGLEON

Class MazeFactory{
public:
   static MazeFactory* Instance();
protected:
   MazeFactory();
private:
   static MazeFactory* _instance;
};

MazeFactory* MazeFactory::_instance = 0;
MazeFactory* MazeFactory::Instance(){
   if(_instance == 0){
      _instance = new MazeFactory;
   }
   return _instance;
}

对于''MazeFactory * MazeFactory :: _ instance = 0;',我应该把它放在哪里?在这个类的定义?有没有其他选择来初始化它?当我阅读它时,我只知道设计是这样的,但我没有明白为什么这样的设计。

2 个答案:

答案 0 :(得分:0)

根据单例的定义,您只需在首次访问它时创建实例。因此,只有在必须将其初始化为NULL时才确保进入if条件。通常,初始化是在类定义中完成的。

答案 1 :(得分:0)

static private可以在类外部初始化,但只能初始化一次。单身人士的许多帖子也会告诉你这一点。是的,这不会打破访问规则。