# include <iostream>
using namespace std;
//??static Garbo garbo_ ?????????????????????????????Garbo??????
//?????????instance_??????
//???????????????????????
//??????????????????????????????????????е?
//??????????????
class Singleton
{
public:
static Singleton* GetInstance()
{
if(NULL == instance_)
{
instance_ = new Singleton;
}
return instance_;
}
~Singleton()
{
cout << "~Singleton ..." << endl;
}
/*???????????????????????????
static void Free()
{
if(NULL != instance_ )
{
delete instance_;
}
}
*/
//?????
class Garbo
{
public:
~Garbo()
{
if(Singleton::instance_ != NULL)
{
delete instance_;
}
}
};
private:
//?????????????????У???????????????????????
Singleton(const Singleton&  other);
//????????????????????????????
Singleton&  operator=(const Singleton&  other);
Singleton()
{
cout << "Singleton ..." << endl;
}
//??????????????????壬?????????????
static Singleton*  instance_;
//????garbo??????????
static Garbo garbo_;
//???????????????????????
};
//???Garbo?????????????????SIngleton
Singleton::Garbo Singleton::garbo_;  //????static???????
Singleton*  Singleton::instance_;
int main(void)
{
//????GetInstance???????Σ????????????????
Singleton*  s = Singleton::GetInstance();
Singleton*  s1 = Singleton::GetInstance();
//Singleton s3(*s);    error  ???????
//Singleton s3 = *s;   error  ??????
//??????????????ü??????????????????????ι?????
//Singleton::Free();  ??????????????????????
return 0;
}
????PS??
????1?????????????????????
????2???????????????????auto_ptr???????????????
????3??????????????滹???????????????????
??