C++设计模式之单例模式

2020-01-06 13:01:55刘景俊

实现三:

 

复制代码
/*
** FileName     : SingletonPatternDemo3
** Author       : Jelly Young
** Date         : 2013/11/20
** Description  : More information, please go to http://www.easck.com/> */
 
#include <iostream>
using namespace std;
 
class Singleton
{
public:
    static Singleton *GetInstance()
    {
        return const_cast <Singleton *>(m_Instance);
    }
 
    static void DestoryInstance()
    {
        if (m_Instance != NULL )
        {
            delete m_Instance;
            m_Instance = NULL ;
        }
    }
 
    int GetTest()
    {
        return m_Test;
    }
 
private:
    Singleton(){ m_Test = 10; }
    static const Singleton *m_Instance;
    int m_Test;
};
 
const Singleton *Singleton ::m_Instance = new Singleton();
 
int main(int argc , char *argv [])
{
    Singleton *singletonObj = Singleton ::GetInstance();
    cout<<singletonObj->GetTest()<<endl;
    Singleton ::DestoryInstance();
}

 

因为静态初始化在程序开始时,也就是进入主函数之前,由主线程以单线程方式完成了初始化,所以静态初始化实例保证了线程安全性。在性能要求比较高时,就可以使用这种方式,从而避免频繁的加锁和解锁造成的资源浪费。由于上述三种实现,都要考虑到实例的销毁,关于实例的销毁,待会在分析。由此,就出现了第四种实现方式:

实现四:

 

复制代码
/*
** FileName     : SingletonPatternDemo4
** Author       : Jelly Young
** Date         : 2013/11/20
** Description  : More information, please go to http://www.easck.com/> */