当前位置: 首页 > news >正文

C++设计思想-001-设计模式-单例模式

1.单例模式优点

保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享;

实现:

1.1 单例模式的类只提供私有的构造函数

1.2类定义中含有一个该类的静态私有对象

1.3该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象

2.单例模式分为饿汉、懒汉模式,多线程下考虑用懒汉模式,一般都用懒汉模式

2.1饿汉模式

特点:开始即初始化单例对象
优点:不用担心多线程问题
缺点:可能程序没有用到该单例对象,造成浪费

#include <iostream>
using namespace std;
class Singleton {
public:static Singleton* GetInstance() {return &singleton_;}private:Singleton(){}static Singleton singleton_;
};Singleton Singleton::singleton_;
int main() {auto p1 = Singleton::GetInstance();auto p2 = Singleton::GetInstance();bool result = (p1 == p2);cout << result << endl;return 0;
}

2.2懒汉模式

特点:需要时再实例化单例对象
优点:在不使用到单例对象时不会造成资源浪费
“缺点”:需要考虑多线程问题,稍微复杂一点(加锁解决)

#include <iostream>
#include <mutex>
using namespace std;
class Singleton {
public:static Singleton* GetInstance() {//判断是否已存在实例if (p_singleton_ == nullptr) {//加锁lock_guard<mutex> lock(mux_);//可能两个线程同时通过第一次检查,一个线程获得锁,可能另外一个线程已经实例化if (p_singleton_ == nullptr) {p_singleton_ = new Singleton();
http://www.lryc.cn/news/486421.html

相关文章:

  • 远程连接服务器
  • 【分布式技术】ES扩展知识-Elasticsearch分词器的知识与选择
  • 【网络安全 | 漏洞挖掘】通过密码重置污染实现账户接管
  • 【Nginx从入门到精通】01 、教程简介
  • MySQL面试之底层架构与库表设计
  • C2 追踪器:监控指挥与控制的重要性
  • 二、神经网络基础与搭建
  • java导出pdf
  • muduo之线程同步CountDownLatch
  • 【Python系列】Python中打印详细堆栈信息的技巧
  • SpringBoot中监听器、过滤器、拦截器和AOP详解
  • 如何让手机ip变成动态
  • [Qt platform plugin问题] Could not load the Qt platform plugin “xcb“
  • 嵌入式开发人员如何选择合适的开源前端框架进行Web开发
  • MySQL数据库(七)----查询相关操作(子查询)
  • 01_Spring开胃菜
  • SpringBoot使用AspectJ的@Around注解实现AOP全局记录接口:请求日志、响应日志、异常日志
  • WPF下播放Rtmp的解决方案
  • 7.高可用集群架构Keepalived双主热备原理
  • 为以人工智能为中心的工作负载重新设计的全局控制台
  • go channel中的 close注意事项 range取数据
  • Vue3 -- 项目配置之eslint【企业级项目配置保姆级教程1】
  • 鸿蒙开发应用权限管理
  • 【数据库】如何保证数据库迁移过程中数据的一致性?
  • C++之内存管理
  • ISP是什么?
  • 机房动环境监控用各种列表已经淘汰了,现在都是可视化图表展示了
  • RHCE的练习(12)
  • uniapp自动注册机制:easycom
  • 【论文阅读】(Security) Assertions by Large Language Models