C++设计模式---单例设计模式

单例模式是一种设计模式,确保类只有一个实例并提供全局访问点。它用于控制对象的实例化过程,常用于资源管理如日志、数据库连接等。文章介绍了懒汉式和饿汉式的单例实现,并讨论了其优点如内存优化和性能提升,以及可能的缺点,如对象状态丢失风险。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是单例模式

单例模式是一种对象创建型模式,使用单例模式,可以保证为一个类只生成唯一的实例对象。也就是说,在整个程序空间中,该类只存在一个实例对象。

为什么使用单例模式

在应用系统开发中,我们常常有以下需求:
1.需要生成唯一序列的环境
2.需要频繁实例化然后销毁的对象。
3.创建对象时耗时过多或者耗资源过多,但又经常用到的对象。
4.方便资源相互通信的环境

实际案例:

多线程中网络资源初始化
回收站机制
任务管理器
应用程序日志管理

单例模式实现步骤

1.构造函数私有化
2.提供一个全局的静态方法,访问唯一对象
3.类中定义一个静态指针,指向唯一对象
在这里插入图片描述

单例模式实现代码

懒汉式

#include <iostream>
using namespace std;
//懒汉式
class SingleTon 
{
private:
    SingleTon();
public:
    static SingleTon* m_singleTon;
    static SingleTon* GetInstance();
    void TestPrint();
};
//懒汉式并没有创建单例对象
SingleTon* SingleTon::m_singleTon = NULL;       
int main()
{
    SingleTon* p1 = SingleTon::GetInstance();
    SingleTon* p2 = SingleTon::GetInstance();
    cout << "p1:"<<  hex << p1 << endl;
    cout << "p2:" << hex << p2 << endl;
    p1->TestPrint();
    p2->TestPrint();
    return 0;
}
SingleTon::SingleTon()
{
    m_singleTon = NULL;
    cout << "构造了对象....." << endl;
}
SingleTon* SingleTon::GetInstance()
{
    if (m_singleTon == NULL) 
    {
        m_singleTon = new SingleTon;
    }
    return m_singleTon;
}
void SingleTon::TestPrint()
{
    cout << "测试调用....." << endl;
}

饿汉式

#include <iostream>
using namespace std;
//懒汉式
class SingleTon 
{
private:
    SingleTon();
public:
    static SingleTon* m_singleTon;
    static SingleTon* GetInstance();
    void TestPrint();
};
//饿汉式创建单例对象
SingleTon* SingleTon::m_singleTon = new SingleTon;      
int main()
{
    SingleTon* p1 = SingleTon::GetInstance();
    SingleTon* p2 = SingleTon::GetInstance();
    cout << "p1:"<<  hex << p1 << endl;
    cout << "p2:" << hex << p2 << endl;
    p1->TestPrint();
    p2->TestPrint();
    return 0;
}
SingleTon::SingleTon()
{
    m_singleTon = NULL;
    cout << "构造了对象....." << endl;
}
SingleTon* SingleTon::GetInstance()
{
    return m_singleTon;
}
void SingleTon::TestPrint()
{
    cout << "测试调用....." << endl;
}

单例模式优缺点

优点:

1.在内存中只有一个对象,节省内存空间;
2.避免频繁的创建销毁对象,可以提高性能;
3.避免对共享资源的多重占用,简化访问;
4.为整个系统提供一个全局访问点。

缺点:

1.不适用于变化频繁的对象;
2.如果实例化的对象长时间用,系统会认为该对象是垃圾而被回收,这可能会导致对象状态的丢失;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值