用于初始化实例的单例

singleton for initializing instance

本文关键字:单例 实例 初始化 用于      更新时间:2023-10-16

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

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

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

static private可以在类外初始化,但只能初始化一次。许多关于单身的帖子也会告诉你这一点。是的,这并没有违反访问规则。