(1)单例模式

一个类只生成唯一的实例对象。


实现步骤:

1)构造函数私有化

2)提供一个全局的静态方法(全局访问点)

3)在类中定义一个静态指针,指向本类的变量的静态变量指针


懒汉式:

#include<iostream>
using namespace std;
#define NULL 0
// 单例模式---懒汉式
class singelTon {
private:
	singelTon() {
		cout << "构造函数" << endl;
	}
	static singelTon* sgl_ptr;
public:
	static  singelTon* get_instance(){
		if (sgl_ptr == NULL) {
			sgl_ptr = new singelTon();
		}
		return sgl_ptr;
	}
	static void free_instance() {
		delete sgl_ptr;
		sgl_ptr = NULL;
		cout << "对象释放成功!" << endl;
	}
};
singelTon* singelTon::sgl_ptr = NULL;
void main() {
	singelTon* ptr1 = singelTon::get_instance();
	singelTon* ptr2 = singelTon::get_instance();
	if (ptr1 == ptr2) {
		cout << "同一个对象!" << endl;
	}
	else {
		cout << "不是同一个对象!" << endl;
	}
	singelTon::free_instance();
	system("pause");
}


饿汉式:

#include<iostream>
using namespace std;
#define NULL 0
// 单例模式---饿汉式
class singelTon {
private:
	singelTon() {
		cout << "构造函数" << endl;
	}
	static singelTon* sgl_ptr;
public:
	static  singelTon* get_instance(){
		return sgl_ptr;
	}
	static void free_instance() {
		delete sgl_ptr;
		sgl_ptr = NULL;
		cout << "对象释放成功!" << endl;
	}
};
singelTon* singelTon::sgl_ptr = new singelTon();
void main() {
	singelTon* ptr1 = singelTon::get_instance();
	singelTon* ptr2 = singelTon::get_instance();
	if (ptr1 == ptr2) {
		cout << "同一个对象!" << endl;
	}
	else {
		cout << "不是同一个对象!" << endl;
	}
	singelTon::free_instance();
	system("pause");
}


懒汉式-多线程不同步的问题:运用二次检查+临界区上锁

static CCriticalsection cs;  //临界区
class singelTon {
private:
	singelTon() {
		cout << "构造函数" << endl;
	}
	static singelTon* sgl_ptr;
public:
	static  singelTon* get_instance() {
		if (sgl_ptr == NULL) {
			cs.Lock();
			if (sgl_ptr == NULL) {
				sgl_ptr = new singelTon();
			}
			cs.Unlock();
		}
		return sgl_ptr;
	}
	static void free_instance() {
		delete sgl_ptr;
		sgl_ptr = NULL;
		cout << "对象释放成功!" << endl;
	}
};
singelTon* singelTon::sgl_ptr = NULL;





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值