两种单件模式

两种单件模式
// 适合于比较小的对象
class  CSingletonObj
{
public:
    
virtual ~CSingletonObj(void); //必须为公有
    static CSingletonObj& Instance(void{return m_Instance;}

protected:
    CSingletonObj(
void); //防止构造与拷贝
    CSingletonObj(const CSingletonObj&);

private:
    
static CSingletonObj m_Instance;
}
;
#include <memory>

using namespace std;

template<class  T>
class Singleton
{
public:
static T* GetInstance();

protected:
Singleton(void) {}
~Singleton(void) {}
Singleton(const Singleton&) {}
Singleton & operator = (const Singleton&) {}

private:
static auto_ptr<T> _instance;
};


template <class T>
auto_ptr<T> Singleton<T>::_instance;

template <class T>
inline T* Singleton<T>::GetInstance()
{
if( 0 == _instance.get())
{
// 加入临界区,可实现多线程安全
_instance.reset ( new T);
}

return _instance.get();
}
//////////////////////////////////////////////////////////////////////////
//使用
class Test : public Singleton<Test> 
public: 
void foo(); 
private: 
Test(); 
~Test(); 
friend class Singleton<Test>; 
}; 

你可能感兴趣的:(两种单件模式)