0

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

单龙

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;',我应该把它放在哪里?在这个类的定义?还有其他选择来初始化它吗?当我阅读它时,我只知道设计是这样的,但我不明白为什么要这样设计。

4

2 回答 2

0

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

于 2013-06-01T10:06:07.457 回答
0

static private 可以在类外初始化,但只能初始化一次。许多关于单例的帖子也会向您展示这一点。是的,这不会违反访问规则。

于 2013-06-01T10:37:50.877 回答