我已经有一些使用指针的单例类:
class Logger
{
public:
static Logger* Instance()
{
if (!m_pInstance) m_pInstance = new Logger;
return m_pInstance;
}
private:
Logger();
Logger(Logger const&);
Logger& operator=(Logger const&);
static Logger* m_pInstance;
};
但是,有一种更简单的方法,使用引用:
class Logger
{
public:
static Logger& Instance()
{
static Logger theLogger;
return theLogger;
}
private:
Logger();
Logger(Logger const&);
Logger& operator=(Logger const&);
~Logger();
};
阅读文章C++ Singleton design pattern,它警告第二种方式:
[潜在陷阱]:由于对象的预期寿命,这种形式的单例可能会出现问题。如果一个单例在另一个中实例化,则必须敏锐地意识到析构函数的调用顺序。
但我无法理解,有人可以告诉我一个不好的用法,我应该避免它吗?