Singleton

class Singleton

{

public:

    ~Singleton();

    static Singleton* GetInstance();



private:

    Singleton();

    static Singleton* m_pInstance;

    static pthread_mutex_t s_initLock;



    class Deletor

    {

    public:

        ~Deletor()

        {

            if (Singleton::m_pInstance)

            {

                delete Singleton::m_pInstance;

                Singleton::m_pInstance = NULL;

            }

        }

    };

    static Deletor s_deletor;

};







Singleton* Singleton::m_pInstance;

pthread_mutex_t Singleton::s_initLock = PTHREAD_MUTEX_INITIALIZER;

Singleton::Deletor Singleton::s_deletor;





Singleton::Singleton()

{

}



Singleton::~Singleton()

{

}





Singleton* Singleton::GetInstance()

{

    if (!m_pInstance)

    {

        pthread_mutex_lock(&s_initLock);

        if (!m_pInstance)

        {

            m_pInstance = new Singleton;

        }

        pthread_mutex_unlock(&s_initLock);

    }



    return m_pInstance;

}

 

你可能感兴趣的:(Singleton)