C++:单例模式

单例模式懒汉式

优点:不需要这个单例的时候不创建,节省内存。

缺点:每次获取单例都要判断,降低软件性能。遇到多线程的时候可能会发生创建多个对象(解决办法:加线程锁,线程同步方式)。

单例模式饿汉式

优点:对于多线程来说相对安全。

缺点:用不用都占内存,无法通过getInstance()传入参数(用set方法)。

#include <iostream>

using namespace std;

//懒汉式
class A
{
public:
	static A* getinstance(){
		if(nullptr==m_instance){
			m_instance=new A;
		}
		handle_count++;
		return m_instance;
	}
	static void release(){
		handle_count--;
		if (nullptr!=m_instance&&handle_count==0){
			delete m_instance;
			m_instance=nullptr;
		}
	}
private:
	A(){}
	static A* m_instance;
	static int handle_count;
};

//饿汉式
class B
{
public:
	static B* getinstance(){
		handle_count++;
		return m_instance;
	}
	static void release(){
		handle_count--;
		if (nullptr!=m_instance&&handle_count==0){
			delete m_instance;
			m_instance=nullptr;
		}
	}
private:
	B(){}
	static B* m_instance;
	static int handle_count;
};
//懒汉式
A* A::m_instance=nullptr;
int A::handle_count=0;
//饿汉式
B* B::m_instance=new B;
int B::handle_count=0;


int main()
{
	B* um1=B::getinstance();
	B* um2=B::getinstance();

	if(um1==um2){
		cout<<"同一个对象"<<endl;
	}else{
		cout<<"不同的对象"<<endl;
	}
	system("pause");
	return 0;
}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值