gpt4 book ai didi

c++ - 单例模式解释

转载 作者:行者123 更新时间:2023-11-30 01:57:37 25 4
gpt4 key购买 nike

在谷歌的帮助下,我做了一个单例日志记录类:

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;
};

现在我想知道这里的 * 是什么:static Log *m_instance;为什么我们将它设置为指针?我真的不明白。我的意思是,它将指向什么?

最佳答案

它是一个指针,因此它最初可以为空;然后指向在第一次访问时使用 new 创建的实例;请参阅 GetInstance 函数。

这是 Singleton 反模式的“惰性泄漏”变体:实例在首次访问时创建,并且永远不会销毁。与所有用 C++ 实现单例的尝试一样,它有一些优点:

  • 无论何时被访问,实例都保证存在;
  • 如果实例从未被访问过,它不会占用任何内存(指针除外)

还有一些不好的地方:

  • 实例永远不会被销毁,因此可能会被报告为内存泄漏;
  • 在每次访问时检查指针的(可能很小的)成本;
  • 创建不是线程安全的,并且在每次访问时不产生(可能是主要的)成本的情况下使其线程安全并非易事。

关于c++ - 单例模式解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18514416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com