ポインターを使用するシングルトン クラスが既にいくつかあります。
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を読むと、2 番目の方法について警告されます。
[潜在的な落とし穴]: この形式のシングルトンは、オブジェクトの寿命のために問題を引き起こす可能性があります。1 つのシングルトンが別のシングルトン内でインスタンス化される場合、デストラクタの呼び出しシーケンスに注意する必要があります。
しかし、私はそれを理解することはできません。誰かがそれを避けるべき悪い使い方を教えてもらえますか?