饿汉模式与懒汉模式

饿汉模式
将单例类的唯一实例对象定义为成员变量,当程序开始运行,实例对象就已经创建完成。
优点:加载进行时静态创建单例对象,线程安全。
缺点:无论使用与否,总要创建,浪费内存。

#include 

using namespace std;

class Singleton
{
private:
	Singleton(void)
	{

	}
	static Singleton object;
public:
	static Singleton& get_object(void)
	{
		return object;	
	}

	void show(void)
	{
		cout << "我是对象:" << &object << endl;
	}
};

Singleton Singleton::object;

int main()
{
	Singleton sig = Singleton::get_object();
	sig.show();
	Singleton sig1 = Singleton::get_object();
	sig1.show();
}

懒汉模式:
用静态成员指针来指向单例类的唯一实例对象,只有真正调用获取实例对象的静态接口时,实例对象才被创建。
优点:什么时用什么时候创建,节约内存。
缺点:在第一调用访问获取实例对象的静态接口才真正创建,如果在多线操作情况下有可能被创建出多个实例对象(虽然可能性很低),存在线程不安全问题。

#include 
#include 

using namespace std;

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
class Singleton
{
private:
	Singleton(void) { }
	static Singleton* objectp;
public:
	static Singleton& get_object(void)
	{
		if(NULL == objectp)
		{
			pthread_mutex_lock(&mutex);
			objectp = new Singleton;
			pthread_mutex_unlock(&mutes);
		}
		return *objectp;
	}
	void show(void)
	{
		cout << "我是对象:" << objectp << endl;
	}
};

Singleton* Singleton:: objectp;

int main()
{
	Singleton str = Singleton::get_object();
	str.show();
	Singleton str1 = Singleton::get_object();
	str1.show();
}

你可能感兴趣的:(饿汉模式与懒汉模式)