在google的帮助下,我创建了一个单例记录类,即:
class Log{
public:
void Initialize(const char* fileName, int logLevel, ...);
void outString(const char* str, ...);
void outError(const char* str, ...);
void outWarning(const char* str, ...);
static Log* GetInstance()
{
if (!m_instance)
m_instance = new Log();
return m_instance;
}
private:
Log() {}
Log(const Log&);
Log& operator=(const Log&);
private:
static Log *m_instance;
void SetColor(bool stdout_stream, Color color);
string getCurrentTime();
void ResetColor(bool stdout_stream);
int m_logLevel;
ofstream *m_file;
};
现在我想知道*在这里是什么:静态日志* m_instance;为什么我们将它设置为指针?我真的不明白。我的意思是,它会指向什么?
答案 0 :(得分:2)
它指向您班级中唯一的一个实例。
您可以通过'Log :: getInstance()'静态函数访问此实例。
当我们在实践中不需要在代码中使用多个类的实例时,我们使用单例模式。
答案 1 :(得分:2)
它是一个指针,因此它最初可以为null;然后指向在第一次访问时使用new
创建的实例;请参阅GetInstance
函数。
这是Singleton反模式的“懒惰泄漏”变体:实例在首次访问时创建,并且永远不会被破坏。像所有在C ++中实现单例的尝试一样,它有一些好处:
和一些坏点: