单例模式的作用与目的

  • 作用:保证了一个类仅有一个实例,并提供了一个访问它的全局访问点
  • 目的:为了保证类的实例对象只有一个
  • 主要解决:一个全局使用的类,频繁的创建于销毁
  • 举例:例如在Windows 是多进程多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同时操作一个文件的现象,所以所有文件的处理必须通过唯一的实例来进行。
  • 何时使用:想控制实例数目,节省系统资源的时候
  • 关键: 构造函数和拷贝构造私有化

实现方法

  1. 私有构造函数和拷贝构造函数 不让类的外部创建对象
  2. 静态类指针 在静态成员函数中实现只创建一个对象的逻辑
  3. 静态成员函数返回类指针 用来实例化(new)对象

代码实现

#include <iostream>
#include <string>

using namespace std;

class DBManager//这里单例模式必要的代码
{
private:
    DBManager()
    {}   
    DBManager(const DBManager& other)
    {}
    static DBManager* instance;
public:
    static DBManager* getInstance()//创建DBManager对象的函数
    {   
        //保证DBManeger对象只被创建一次
        if(instance == 0)
        {
            instance = new DBManager;
        }
        return instance;
    }

    static void releaseInstance()//释放对象
    {
        delete instance;
        instance = 0;
    }
};

DBManager* DBManager::instance = 0;

int main()
{
    //想创建DBManager对象,只有getInstance一种方式
    DBManager* d1 = DBManager::getInstance();
    DBManager* d2 = DBManager::getInstance();
    DBManager* d3 = DBManager::getInstance();
    DBManager* d4 = DBManager::getInstance();
    DBManager* d5 = DBManager::getInstance();
    DBManager* d6 = DBManager::getInstance();

    //DBManager* d7 = new DBManager();//语法错误  因为私有化构造函数
    //DBManager* d8 = new DBManager(*d1);//语法错误  因为私有化拷贝构造函数
    cout<<d1<<" "<<d2<<" "<<d3<<" "<<d4<<" "<<d5<<" "<<d6<<endl;
    return 0;
}
End

本文标题:C++实现单例模式

本文链接:http://chisato.cn/index.php/archives/31/

除非另有说明,本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

声明:转载请注明文章来源。

最后修改:2021 年 11 月 21 日 02 : 28 PM
如果觉得我的文章对你有用,请随意赞赏