// 单例模式,保证一个类只有一个实例,并提供该实例的全局访问点
// 1.使用一个私有构造函数保证不能通过构造函数来创建
// 2.使用静态私有成员变量保存唯一的实例
// 3.使用公有静态成员函数初始化唯一实例
/* 1.懒汉式-线程不安全 */
class Sigleton1
{
private:
Sigleton1();
static Sigleton1 *sig1;
public:
static Sigleton1 *Init()
{
// if语句是线程不安全的,如果同时有多线程判断为空,就会实例出多个对象
// 而且其他对象都是没有指针指向的,无法使用。
if(sig1 == nullptr)
{
sig1 = new Sigleton1();
}
return sig1;
}
};
/* 2.饿汉式-线程安全 */
class Sigleton2
{
private:
Sigleton2();
static Sigleton2 *sig2;
public:
static Sigleton2 *Init();
};
// 因为在类加载的时候就初始化,所以不会有线程问题
Sigleton2* Sigleton2::sig2 = new Sigleton2();
Sigleton2* Sigleton2::Init()
{
return sig2;
}
/* 3.懒汉式-线程安全*/
// 使用双检查锁,但是可能因为内存读写的问题,不安全
int main()
{
Sigleton2 *p2 = Sigleton2::Init();
Sigleton1 *p1 = Sigleton1::Init();
}
C++单例模式
最新推荐文章于 2024-08-22 00:23:00 发布