2015-01-26 2 views
0

Выполните приведенный ниже код. Если бы я должен был добавить некоторые данные частного члена в этот класс, скажем, 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

Если это 'static', он не может быть создан до создания' m_pInstance'. –

0

Большая проблема - это порядок инициализации. В C++ singleton idiom обычно используется для разрешения порядка инициализации, поэтому может быть проблемой: если члены статичны, вы не можете быть уверены, что они были созданы до того, как вы попытаетесь использовать их ,