23,125
社区成员
发帖
与我相关
我的任务
分享
类的定义:
template<class T>
class SingletonT
{
public:
static T* Instance()
{
static SingletonT single;
if (0 == single._instance.get())
{cout<<"0 == single._instance.get()"<<endl;
single._instance.reset(new T);
}
return single._instance.get();
}
virtual ~SingletonT(void){cout<<"~single"<<endl; _instance.reset(NULL);};
private:
SingletonT(void){};
SingletonT(const SingletonT&){}
SingletonT& operator=(const SingletonT&){}
auto_ptr<T> _instance;
};
namespace svcctrl
{
class ModuleStatusCheck : public CheckThread
{
public:
ModuleStatusCheck(void);
~ModuleStatusCheck(void);
virtual void Check();
private:
ModuleStatusCheck(const ModuleStatusCheck& other);
ModuleStatusCheck & operator = (const ModuleStatusCheck& other);
DECLARE_SINGLETON_CLASS(ModuleStatusCheck);
};
typedef SingletonT<ModuleStatusCheck> SModuleStatusCheck;
}
使用:
int main()
{
SModuleStatusCheck::::Instance()->Start();//创建线程,执行一些数据库任务
while(true)
{
cout<<"in while"<<endl;
sleep(1);
}
return 0;
}
问题:在数据库切换的时候,析构了,打印:~single ~ModuleStatusCheck ~CheckThread
线程监测到析构,于是线程自身按照正常流程结束,最后这个int main()就无奈的陷在了while(true)里。
既然main没有结束,那么我的单例为什么会析构呢!!!!!!!!!!!!!!!!