C++单例模式

// 单例模式,保证一个类只有一个实例,并提供该实例的全局访问点
// 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();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橙子砰砰枪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值