2013-06-01 180 views
0

我正在阅读,并且在下面的示例中存在疑问。初始化实例的单例

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 :: _实例= 0;”,我应该在哪里需要把这个?在这个类的定义中?有其他选择来初始化它吗?当我读到它时,我只知道设计就是这样,但我没有明白为什么这样的设计。

回答

0

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

0

static private可以在类之外初始化,但只能使用一次。单身人士的很多帖子也会向你展示这一点。是的,这并不违反访问规则。