蜗牛的家
男儿当自强
posts - 48,  comments - 21,  trackbacks - 0
//适合于比较小的对象
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++

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2008年8月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456

常用链接

留言簿(2)

随笔分类

随笔档案

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜