Singleton 单例模式

单例模式

单例模式用来确保一个类仅存在一个实例,该模式亦提供对此唯一实例的全局访问点。单例模式要求创建一个类,它包含一个静态的方法,每次调用该方法时返回该类的一个实例。

注意点:

  1. 如果不想让客户能够创建新的实例,可以将类的默认构造函数声明为私有或者保护
  2. 如果想让单例不可复制,可以私有复制构造函数和赋值操作符
  3. 如果想禁止客户删除单例的实例,可以将析构函数声明为私有
  4. 为了保证之前构造的实例,在程序运行期间一直存在,不被析构,我们只能把指向这个实例的指针声明成静态变量,存放在静态存储区,把这个类的实例用new来构造,并放在堆里

单例模式的优缺点:

  1. 对唯一的实例受控访问 因为Singleton类封装它的唯一实例,所以它可以严格的控制客户怎样以及何时访问它。
  2. 缩小名空间 Singleton模式是对全局变量的一种改进。它避免了那些存储唯一实例的全局变量污染名空间。
  3. 允许对操作和表示的精化 Singleton类可以有子类,而且用这个扩展类的实例来配置一个应用是很容易的。可以用所需的类的实例在运行时刻配置应用。
  4. 允许可变数目的实例 可以控制Singleton类的数目

Code

#include <iostream>

using namespace std;

class Singleton
{
public:
    static Singleton* GetInstance();
    void message();
protected:
    Singleton(){};
    Singleton(const Singleton&);
    const Singleton& operator =(const Singleton&);
};

Singleton* Singleton::GetInstance(){
    static Singleton _instance;
    return &_instance;
}

void Singleton::message(){
    cout<<"这是单例"<<endl;
}



int main()
{
    Singleton *p = Singleton::GetInstance();
    p->message();
    Singleton *tmp =p;
    if(tmp==p)
        cout<<"这是确实是单例"<<endl;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值