2015-01-26 5 views
0

아래 코드를 참조하십시오. 이 클래스에 private 멤버 데이터를 추가하려면 std :: vector라고 말하면 정적이든 아니든간에 만들겠습니까?싱글 톤 클래스에 정적 변수가 필요합니까?

#include <string> 

class Logger{ 
public: 
    static Logger* Instance(); 
    bool openLogFile(std::string logFile); 
    void writeToLogFile(); 
    bool closeLogFile(); 

private: 
    Logger(){}; // Private so that it can not be called 
    Logger(Logger const&){};    // copy constructor is private 
    Logger& operator=(Logger const&){}; // assignment operator is private 
    static Logger* m_pInstance; 
}; 

** 코드 예제는 뻔뻔 아니, 관용구 here

답변

3

에서 가져옵니다. 그 외에도, 당신이 그 일을하지 못하게하는 것은 아무것도 없습니다.

static 인 경우 프로그램이 시작될 때 main에 들어가기 전에 멤버를 정의하고 초기화해야합니다.

static이 아닌 경우 m_pInstance이 생성되면 초기화됩니다 (게으른 초기화가 필요한 경우 유용 할 수 있음).

+0

정적 인 경우'm_pInstance'가 생성되기 전에 생성되지 않을 수 있습니다. –

0

큰 문제는 초기화 순서입니다. C++에서 singleton idiom 은 일반적으로 초기화 문제를 해결하는 데 사용되므로 이 문제가 될 수 있습니다. 멤버가 정적 인 경우 을 사용하려고 시도하기 전에 해당 멤버가 생성되었는지 확신 할 수 없습니다 .

관련 문제