一:
#include <iostream>
using namespace std;
class Singleton
{
public:
static Singleton* GetInstance()
{
if(instance_ ==NULL)
{
instance_ = new Singleton;
}
return instance_;
}
~Singleton()
{
cout<<"~singleton..."<<endl;
}
static void Free() {
if(instance_ != NULL)
{
delete instance_;
}
}
private:
Singleton(const Singleton& other); //禁止拷贝 不提供实现
Singleton& operator=(const Singleton& other);//禁止赋值
Singleton()
{
cout<<"singleton..."<<endl;
}
static Singleton* instance_;
};
Singleton* Singleton::instance_;
int main(void)
{
Singleton* s1 = Singleton::GetInstance();
Singleton* s2 = Singleton::GetInstance();
Singleton::Free();
return 0;
}
二.
#include <iostream>
using namespace std;
class Singleton
{
public:
static Singleton* GetInstance()
{
if(instance_ ==NULL)
{
instance_ = new Singleton;
}
return instance_;
}
~Singleton()
{
cout<<"~singleton..."<<endl;
}
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_;
static Garbo garbo_;
};
Singleton* Singleton::instance_;
Singleton::Garbo Singleton::garbo_ ;
int main(void)
{
Singleton* s1 = Singleton::GetInstance();
Singleton* s2 = Singleton::GetInstance();
return 0;
}
三.
#include <iostream>
using namespace std;
class Singleton
{
public:
static Singleton& GetInstance()
{
static Singleton instance; //局部的静态对象,在运行期初始化,有状态
return instance;
}
~Singleton()
{
cout<<"~singleton..."<<endl;
}
private:
Singleton(const Singleton& other); //禁止拷贝 不提供实现
Singleton& operator=(const Singleton& other);//禁止赋值
Singleton()
{
cout<<"singleton..."<<endl;
}
static Singleton* instance_;
};
Singleton* Singleton::instance_;
int main(void)
{
Singleton& s1 = Singleton::GetInstance();
Singleton& s2 = Singleton::GetInstance();
return 0;
}