= instance){
EnterCriticalSection(&cs);
if(NULL == instance){//双检锁,在进入临界区后再检测一次是否对象已经建立
instance = new SingleTon();
}
LeaveCriticalSection(&cs);
}
return instance;
}
static void delelteInstance(){
if(NULL != instance){
EnterCriticalSection(&cs);
if(NULL != instance){
delete instance;
instance = NULL;
}
LeaveCriticalSection(&cs);
}
}
private:
SingleTon(){ }
SingleTon(const SingleTon&);
SingleTon& operator=(const SingleTon&);
static SingleTon* instance;
~SingleTon(){}//相应的关闭连接等操作
class GarBo{
public:
~GarBo(){
if(NULL != instance){
EnterCriticalSection(&cs);
if(NULL != instance){
delete instance;
instance = NULL;
}
LeaveCriticalSection(&cs);
}
}
};
static GarBo gc ;
};
SingleTon* SingleTon::instance ;
SingleTon::GarBo SingleTon::gc;//类外的初始化。这样就获得一个比较完美的单例类了。
|