2013-09-01 144 views
0

我決定重寫我的代碼並用智能指針或引用替換所有原始指針。但是,我爲我的一些類(Game,EntityManager,Input ...)使用了單例模式,並且不知道何時初始化智能指針。問題是我使用SDL,我需要設置的智能指針的deletor單例類中的初始化列表

std::unique_ptr<SDL_Window> window_(SDL_CreateWindow(...), SDL_DestroyWindow); 

這是我會怎麼normaly做,但我不知道該怎麼做時,指針是單身的私有成員類,我不能傳遞任何參數給類的構造函數(如窗口名稱,寬度,高度...)。

class Game 
{ 
private: 
    std::unique_ptr<SDL_Window> window_; 

    Game(); 
    ~Game(); 

public: 
    static Game& getInstance(); 
}; 

感謝您的回答。

回答

0

,您仍然可以使用成員初始化列表:

Game::Game() 
    : window_(SDL_CreateWindow(...), SDL_DestroyWindow) 
{ 
} 
+0

哦,我可能沒寫的問題吧,我知道我可以,但這種方式的問題是我不能傳遞任何參數的遊戲int main()至少我不知道如何。 – davidv

+1

那麼,你可以讓實例未初始化,並在一個單獨的方法中初始化它,例如'setupSingleton()',並且在未設置的情況下訪問單例時引發異常。順便說一句,辛格爾頓是一種反模式,合法用途很少。你的使用似乎認爲調用全局變量是一個單身人士讓他們以某種方式受到祝福!它沒有。 –