C++核心编程13 单例模式

  1. 单例模式定义:单例对象必须保证有且仅有一个实例存在,这个实例不允许被拷贝。
  2. 实现单例模式的思路是:一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名称);当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用;同时还将该类的构造函数定义为私有方法,这样其他处的代码就无法通过调用该类的构造函数来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例。
  3. #define _CRT_SECURE_NO_WARNINGS
    #include<iostream>
    using namespace std;
    
    class ChairMan
    {
    public:
    	//返回主席指针
    	static ChairMan* getInstance()
    	{
    		return singleMan;
    	}
    private:
    	//将构造函数私有化,不可以创建多个对象
    	ChairMan() 
    	{ 
    		//cout << "ChairMan默认构造函数调用" << endl;
    	};
    	ChairMan(const ChairMan &c) 
    	{ 
    		cout << "ChairMan拷贝构造函数调用" << endl;
    	};
    	//数据是共享的,只需要拿到一个主席的对象指针
    
    //public:
    	static ChairMan* singleMan;
    };
    
    ChairMan* ChairMan::singleMan = new ChairMan;//唯一的主席类指针
    
    void test01()
    {
    	/*ChairMan c1;
    	ChairMan c2;
    	ChairMan* c3 = new ChairMan;*/
    
    	/*ChairMan* c1 = ChairMan::singleMan; 
    	ChairMan* c2 = ChairMan::singleMan;*/ //当public 被注释掉 就无法直接访问singleMan了
    
    	/*if (c1 == c2)
    	{
    		cout << "c1与c2相等" << endl;
    	}
    	else
    	{
    		cout << "c1与c2不等" << endl;
    	}*/
    
    	//ChairMan::singleMan = NULL; //getInstance 
    
    	ChairMan* c1 = ChairMan::getInstance();
    	ChairMan* c2 = ChairMan::getInstance(); 
    	if (c1 == c2)
    	{
    		cout << "c1与c2相等" << endl;
    	}
    	else
    	{
    		cout << "c1与c2不等" << endl;
    	}
    
    	//ChairMan* c3 = new ChairMan(*c1);//调用拷贝构造函数 要让拷贝构造函数私有化
    	//if (c1 == c3)
    	//{
    	//	cout << "c1与c3相等" << endl;
    	//}
    	//else
    	//{
    	//	cout << "c1与c3不等" << endl;
    	//}
    }
    
    int main()
    {
    	test01();
    	//cout << "main函数调用" << endl;
    	system("pause");
    	return 0;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值