C++完美实现Singleton模式

本文介绍了一种改进的C++单例模式实现方法,通过将构造函数设置为受保护的方式,使得特定类能够直接继承自单例基类,简化了实例化过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

template <class T> 
class Singleton 
{ 
public: 
static inline T& instance() 
{ 
static T _instance; 
return _instance; 
} 

private: 
Singleton(void); 
~Singleton(void); 
Singleton(const Singleton<T>&); 
Singleton<T>& operator= (const Singleton<T> &); 
}; 
typedef Singleton<ServiceManger> SSManger; 
int _tmain(int argc, _TCHAR* argv[])
{
        SSManger::instance()->Run();
}

把模板类的构造函数放在私有段里了,如果放在protected段里就好得多,因为你的类可以从模板类继承,这样就不再需要你的那个 typedef Singleton<ServiceManger> SSManger;定义了。示例如下: 
template <class T> 
class Singleton { 
public: 
static T& instance() { 
static T _instance; 
return _instance; 

protected: 
Singleton(void) {} 
virtual ~Singleton(void) {} 
Singleton(const Singleton<T>&); //不实现 
Singleton<T>& operator= (const Singleton<T> &); //不实现 
}; 
-------------------------------- 
下面是一个需要做为单例的类,只需从Singleton继承即可 
class Test : public Singleton<Test> { 
public: 
void foo(); 
private: 
Test(); 
~Test(); 
friend class Singleton<Test>; 
}; 
---------------------- 
这样,别人在使用的时候,只需要写 
Test::instance().foo(); 
而再也不需要写: 
Singleton<Test>::instance().foo(); 
或者 
typedef Singleton<Test> STest; 

STest::instance().foo(); 


转自:http://www.cppblog.com/dyj057/archive/2005/09/20/346.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值