2013-06-01 169 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可以在類之外初始化,但只能使用一次。單身人士的很多帖子也會向你展示這一點。是的,這並不違反訪問規則。