static与单例模式
1.保证一个类只有一个实例,并提供一个全局访问点
2.禁止拷贝
演示1
#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()
{
cout << "Singleton..." << endl;
}
Singleton(const Singleton& other);
Singleton& operator=(const Singleton& other);
static Singleton* instance_;
static Garbo garbo_;
};
Singleton* Singleton::instance_;
Singleton::Garbo Singleton::garbo_;
int main()
{
Singleton *s1 = Singleton::GetInstance();
Singleton *s2 = Singleton::GetInstance();
return 0;
}

演示2
#include <iostream>
using namespace std;
class Singleton
{
public:
static Singleton& GetInstance()
{
static Singleton instance;
return instance;
}
~Singleton()
{
cout << "~Singleton222..." << endl;
}
private:
Singleton()
{
cout << "Singleton..." << endl;
}
Singleton(const Singleton& other);
Singleton& operator=(const Singleton& other);
};
int main()
{
Singleton& s1 = Singleton::GetInstance();
Singleton& s2 = Singleton::GetInstance();
return 0;
}

线程安全的单例模式类的实现