C++设计模式之单例模式

实现单例步骤
1、构造函数私有化
2、增加静态的私有的当前类的指针对象
3、提供静态的对外接口,可以让用户获得单例对象

单例分为懒汉式和饿汉式
在多线程环境下:懒汉式会造成线程不安全(解决方法:加锁),饿汉式线程安全。

懒汉式:只有调用getInstance时才会new一个对象;

class Singleton_lazy{
private:
	Singleton_lazy(){
		cout<<"我是懒汉式构造函数"<<endl;
	}
publicstatic Singleton_lazy* getInstance(){
		if(pSingleton == NULL){
			pSingleton = new Singleton_lazy;
		}
		return pSingleton;
	}
private:
	static Singleton_lazy* pSingleton;
};
//类外初始化
Singleton_lazy* Singleton_lazy::pSingleton = NULL;

饿汉式:类外初始化时直接new一个对象

class Singleton_hungry{
private:
	Singleton_hungry(){
		cout<<"我是饿汉式构造函数"<<endl;
	}
publicstatic Singleton_hungry* getInstance(){
		return pSingleton;
	}
private:
	static Singleton_hungry* pSingleton;
};
//类外初始化
Singleton_hungry* Singleton_hungry::pSingleton = new Singleton_hungry;
int main(){
	cout << "main函数开始执行"<<endl;

	return 0;
}

//输出
我是饿汉式构造函数
main函数开始执行
int main(){
	//p1和p2指向同一地址空间,说明只创造出了一个懒汉式对象
	Singleton_lazy* p1 = Singleton_lazy::getInstance();
	Singleton_lazy* p2 = Singleton_lazy::getInstance();
	//p3和p4指向同一地址空间,说明只创造出了一个饿汉式对象
	Singleton_hungry* p3 = Singleton_hungry::getInstance();
	Singleton_hungry* p4 = Singleton_hungry::getInstance();

	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值