单例模式

前言

单例模式估计是校招考的最多的了,没想到此刻还在复习单例模式。
单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点。

代码

单线程时的单例

Singleton.h
懒汉式

#ifndef SINGLETON_H
#define SINGLETON_H

class Singleton {
private:
    static Singleton *instance;
    Singleton() {};
    ~Singleton() = default;
    Singleton(const Singleton &) = delete;
    Singleton &operator=(const Singleton &) = delete;
public:
    static Singleton *getInstance() {
        if (instance == nullptr) {
            instance = new Singleton();
        }
        return instance;
    }
};

Singleton *Singleton::instance = nullptr;

#endif //SINGLETON_H

main.cpp

#include <iostream>
#include "Singleton.h"

using namespace std;

int main() {
    Singleton* s1 = Singleton::getInstance();
    Singleton* s2 = Singleton::getInstance();
    if (s1 == s2) {
        cout<<"两个对象是相同的实例";
    }
    return 0;
}

多线程时的单例

在C++11内部静态变量的方式里是线程安全的,只创建了一次实例。
Singleton.h

#ifndef SINGLETON_H
#define SINGLETON_H


class Singleton {
private:
    Singleton() {};
    ~Singleton() = default;
    Singleton(const Singleton &) = default;
    Singleton &operator=(const Singleton &) = delete;

public:
    int para{};

    static Singleton &getInstance() {
        static Singleton singleton;
        return singleton;
    }
};
#endif //SINGLETON_H

main.cpp

#include <iostream>
#include "Singleton.h"

using namespace std;

int main() {
    Singleton::getInstance().para = 5;
    cout<<Singleton::getInstance().para<<endl;
    cout<<Singleton::getInstance().para<<endl;
    return 0;
}

参考

C++ 单例模式

相关推荐

  1. 模式模板

    2024-04-09 17:58:04       43 阅读
  2. 模式【C#】

    2024-04-09 17:58:04       54 阅读
  3. python模式

    2024-04-09 17:58:04       63 阅读
  4. 模式详解

    2024-04-09 17:58:04       61 阅读
  5. 模式学习

    2024-04-09 17:58:04       48 阅读
  6. 模式(C++)

    2024-04-09 17:58:04       51 阅读
  7. 设计模式

    2024-04-09 17:58:04       63 阅读
  8. 【C++ 模式

    2024-04-09 17:58:04       65 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-09 17:58:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-09 17:58:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-09 17:58:04       87 阅读
  4. Python语言-面向对象

    2024-04-09 17:58:04       96 阅读

热门阅读

  1. TLC3702双微功耗电压比较器

    2024-04-09 17:58:04       40 阅读
  2. 除了sql外还有那些查询语言

    2024-04-09 17:58:04       40 阅读
  3. C++:std命名空间及输入输出流

    2024-04-09 17:58:04       33 阅读
  4. 蓝桥杯——求和

    2024-04-09 17:58:04       35 阅读
  5. oracle回收表空间

    2024-04-09 17:58:04       34 阅读
  6. 不同于Oracle:SEQUENCE的区别

    2024-04-09 17:58:04       28 阅读
  7. 进入Docker容器内部的文件夹

    2024-04-09 17:58:04       38 阅读
  8. css设置主题变量

    2024-04-09 17:58:04       35 阅读
  9. PostCss:详尽指南之安装和使用

    2024-04-09 17:58:04       34 阅读
  10. iOS自定义初始化方法

    2024-04-09 17:58:04       30 阅读
  11. 在Windows系统上下载并安装MySQL的详细教程

    2024-04-09 17:58:04       35 阅读
  12. 本地文件转为MultipartFile,图片地址转MultipartFile

    2024-04-09 17:58:04       38 阅读
  13. 如何动态往Spring容器注册/移除bean?

    2024-04-09 17:58:04       35 阅读
  14. pe格式从入门到图形化显示(五)-RVA和FOA

    2024-04-09 17:58:04       36 阅读
  15. 记一个Unity的异常问题

    2024-04-09 17:58:04       37 阅读
  16. UVA10391 Compound Words 复合词 解题报告

    2024-04-09 17:58:04       29 阅读
  17. Python入门:轻松学习,编程不再难

    2024-04-09 17:58:04       36 阅读
  18. 云智前端面试题

    2024-04-09 17:58:04       32 阅读
  19. 服务器硬件基础知识解析

    2024-04-09 17:58:04       31 阅读