C++_单列模式介绍

介绍

  • (1)…什么是单例
    1.只能有一个实例化的对象的类
  • (2).单例有什么用
    1.多线程的线程池的设计
    2.系统中只需要一个窗口时才使用单例(无法重复创建)
    3.一个操作系统只能有一个文件系统
  • (3).单例怎么用
    1.隐藏所有构造函数
    2.静态成员内部调用构造函数实例化
    3.提供一个静态函数来返回静态成员对象

源码

#include
#include

using namespace std;
//不管用不用,程序开始就会实例化一个对象(饿汉式)
#if 1

class single
{
public:
	//调用实例化
	static single& getinstance()
	{
		return s_instance;
	}
private:

	single(){}//构造
	single(int data) :m_data(data){}//初始化单参构造
	single(const single&){}//拷贝构造
	int m_data;
	static single s_instance;//静态成员变量引用

};
single single::s_instance(100);//自动调用构造函数
#endif

//直到使用时才实例化对象,如果不被调用就不会占用内存(懒汉式)
#if 1
class singletol
{
public:
	//调用实例化
	static singletol* getinstance()
	{
		if (!s_instance)
		{
			s_instance = new singletol(200);
		}
		return s_instance;
	}
private:

	singletol(){}//构造
	singletol(int data) :m_data(data){}//初始化单参构造
	singletol(const single&){}//拷贝构造
	int m_data;
	static singletol* s_instance;//静态成员变量引用

};
singletol* singletol::s_instance(NULL);//自动调用构造函数
#endif
void main()
{
//懒汉式(创建地址不一致)
	singletol *s1 = singletol::getinstance();
	singletol *s2 = singletol::getinstance();
	cout << &s1 << " " << &s2 << endl;
//饿汉式(创建地址一致)
	single &st1 = single::getinstance();
	single &st2 = single::getinstance();
	cout << &st1 << " " << &st2 << endl;

	system("pause");
}

运行结果

00F1F8B8 00F1F8AC
00E10694 00E10694
请按任意键继续. . .

你可能感兴趣的:(C++学习参考,c++,学习,笔记)