C++单例模式使用

C++单例模式使用

简介

  一直以来都没有细细的看过设计模式,今天借助博客来记录一下学习过程。单例模式,是这些设计模式中最常用的一种模式,之前我们可能使用过全局或者静态变量的方式,现在可以考虑单例模式了。
单例模式主要是在一些工具类使用较多,因为工具类基本不用存储太多的跟自身有关的数据,这种情况下,如果每次都new一个对象,增加了开销,其实这就只需要实例一个对象。全局变量或者静态变量的方式,对封装性有影响。
将默认的构造函数声明为私有的,这样就不会被外部所new.
  此外在使用C++单例模式中较重要的一个细节就是要注意单线程和多线
程和多线程的区别。

1、常见使用

class Singleton
{
protected:
    Singleton();
private:
    static Singleton* p;//内部保存一个private static的类指针保存唯一实例
public:
    static Singleton* getInstance();
};//类后面加的;

Singleton::Singleton()
{
    cout<<"This is construct of Singleton!"<<endl;
}
Singleton* Singleton::getInstance()
{
    Singleton* p=NULL;
    //判断是否对象为空
    if(p==NULL)
        p=new Singleton();
    return p;
}  
//类中的静态成员变量要在类体外进行定义
Singleton* Singleton::p=0;

int main()
{
    p=Singleton::getInstace();//获取对象
}  

  上面的代码是一个单线程下的例子,不过这个方法是线程不安全的,如果两个线程同时调用getInstance()方法时,同时检测到p是一个NULL值,则两个线程会同时实例,这就是有问题了。

2、其他模式(懒汉和饿汉模式)

  饿汉模式,饿汉模式的实现本来就是线程安全的(思考点,空间换时间)。

class Singleton
{
protected:
    Singleton(){}
private:
    static Singleton* p;
public:
    static Singleton* getInstance();
};
Singleton* Singleton::p=new Singleton;
Singleton* Singleton::getInstance()
{
    return p;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值