//适合于比较小的对象
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>;
};
posted on 2008-11-11 16:58
黑色天使 阅读(267)
评论(0) 编辑 收藏 引用 所属分类:
C\C++