单例模式(懒汉模式,饿汉模式)

文章介绍了C++中两种常见的单例模式实现方式:懒汉式和饿汉式。懒汉式在首次调用时创建实例,饿汉式在编译时即创建实例。文章提供了示例代码,并通过测试函数展示了两种方式确保了单例的特性,即类的实例只有一个。
摘要由CSDN通过智能技术生成

https://blog.csdn.net/weixin_43754049/article/details/125888390

#include <iostream>
using namespace std;
//单例 分为懒汉式 和 饿汉式
class Singleton_lazy {
private:
    Singleton_lazy() {cout << "Singleton_lazy()" << endl;}
public:
    //增加一个条件判断 如果静态变量为空 则创建一个对象返回
    static Singleton_lazy* getInstance() {
        cout << "Singleton_lazy-----getInstance()" << endl;
        if (pSingleton == NULL) {
            pSingleton = new Singleton_lazy;
        }
        return pSingleton;
    }
 //这个释放堆区对象的方式不能提供 太危险了
    //只要有一个人释放 大家共享的对象就都没了
    /*static void freeSpace() {
        if (pSingleton != NULL) {
            delete pSingleton;
            pSingleton = NULL;
        }
    }*/
private:
    static Singleton_lazy* pSingleton;
};
//类外初始化
Singleton_lazy* Singleton_lazy::pSingleton = NULL;
 
class Singleton_hungry {     //饿汉式
private:
    Singleton_hungry() { cout << "我是饿汉式构造" << endl; }
public:
    //可以发现这里没有条件判断了
    static Singleton_hungry* getInstance() {
        cout << "Singleton_hungry-----getInstance()" << endl;
        return pSingleton;
    }
private:
    static Singleton_hungry* pSingleton;
};
//类外初始化 初始化的时候直接创建对象
Singleton_hungry* Singleton_hungry::pSingleton = new Singleton_hungry;
 
void test01() {
    cout << "in test01()" << endl;
    Singleton_lazy* p1 = Singleton_lazy::getInstance();
    Singleton_lazy* p2 = Singleton_lazy::getInstance();
    if (p1 == p2) {
        cout << "两个指针指向同一块内存 是单例" << endl;
    }
    else {
        cout << "不是单例模式" << endl;
    }
}
void test02() {
    cout << "in test02()" << endl;
    Singleton_hungry* p1 = Singleton_hungry::getInstance();
    Singleton_hungry* p2 = Singleton_hungry::getInstance();
    if (p1 == p2) {
        cout << "两个指针指向同一块内存 是单例" << endl;
    }
    else {
        cout << "不是单例模式" << endl;
    }
}
int main() {
    cout << "我是main函数" << endl;
    test01();
    test02();
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值