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

C++设计模式-更新中

单例模式

这个类实现了单例模式。单例模式是一种设计模式,旨在确保一个类只有一个实例,并提供一个全局访问点来获取该实例。

ConnectionManager 类中,它通过以下方式实现了单例模式:

  1. 构造函数 ConnectionManager() 被声明为私有外部无法直接创建类的实例。
  2. 通过静态成员函数 getInstance() 来获取 ConnectionManager 类的实例。该函数使用了一个静态的 ConnectionManager 类型对象,并在首次调用时创建该对象,并保证只有一个实例被创建。
  3. 复制构造函数和赋值运算符被删除,禁止直接进行对象的拷贝构造和赋值操作,确保只有一个实例存在。

通过实现这些特性,ConnectionManager 类确保只能通过单例实例来访问和操作类的方法和成员变量,从而实现了单例模式。

#ifndef RDMA_SERVER_CONNECTIONMANAGER_H
#define RDMA_SERVER_CONNECTIONMANAGER_H#pragma once#include "../common/common.h"
#include "../queue_manager/QueueManager.h"
#include "../buffer_manager/BufferManager.h"
#include "./Connection.h"
// 是的,这个类实现了单例模式。单例模式是一种设计模式,旨在确保一个类只有一个实例,并提供一个全局访问点来获取该实例。// 在 `ConnectionManager` 类中,它通过以下方式实现了单例模式:// 1. 构造函数 `ConnectionManager()` 被声明为私有,外部无法直接创建类的实例。
// 2. 通过静态成员函数 `getInstance()` 来获取 `ConnectionManager` 类的实例。该函数使用了一个静态的 `ConnectionManager` 类型对象,
//并在首次调用时创建该对象,并保证只有一个实例被创建。
// 3. 复制构造函数和赋值运算符被删除,禁止直接进行对象的拷贝构造和赋值操作,确保只有一个实例存在。// 通过实现这些特性,`ConnectionManager` 类确保只能通过单例实例来访问和操作类的方法和成员变量,从而实现了单例模式。
class ConnectionManager {
public:
//单例模式static ConnectionManager &getInstance();ConnectionManager(ConnectionManager const &) = delete;void operator=(ConnectionManager const &) = delete;~ConnectionManager();Connection *create(struct ibv_device *);void destroy(Connection *);struct ibv_qp *createQueuePair(Connection *, struct ibv_qp_attr *);void connectQueuePair(Connection *, uint32_t, uint32_t, ibv_mtu, struct ibv_qp_attr *);void resetQueuePair(struct ibv_qp *, struct ibv_qp_attr *);private:ConnectionManager();std::shared_ptr<spdlog::logger> logger = nullptr;std::shared_ptr<QueueManager> queueManager = std::make_shared<QueueManager>();std::mutex queuePairsMtx;
};#endif
http://www.lryc.cn/news/155997.html

相关文章:

  • Hydra工具的使用
  • Pytorch学习:卷积神经网络—nn.Conv2d、nn.MaxPool2d、nn.ReLU、nn.Linear和nn.Dropout
  • 水果库存系统(SSM+Thymeleaf版)
  • 如何在VueJS应用程序中设置Toast通知
  • css让元素保持等比例宽高
  • 骨传导和入耳式哪个危害大一点?入耳式和骨传导哪种好?
  • 介绍OpenCV
  • Android中的view绘制流程,简单理解
  • 商城开发:店铺管理系统应具备哪些功能?
  • 小白学go基础04-命名惯例对标识符进行命名
  • 使用iCloud和Shortcuts实现跨设备同步与自动化数据采集
  • Spring框架-基于STOMP使用Websocket
  • kafka-- 安装kafka manager及简单使用
  • 深圳-海岸城购物中心数据分析
  • vue3 + elementplus Cannot read properties of null (reading ‘isCE‘)
  • 易云维®医院后勤管理系统软件利用物联网智能网关帮助实现医院设备实现智能化、信息化管理
  • c# 定期重启程序操作
  • ps beta 2.5的妙用
  • IDEA无效发行版本17
  • Ubuntu22.04安装ROS
  • Linux 学习笔记(2)—— 关于文件和目录
  • [重要] 如何在桌面上生成一个指定网址的快捷方式
  • PyQt和Qt的其他绑定(如PySide)相比有什么优势和劣势?
  • 4K三路虚拟情景实训教学系统VR4300:实现“微课录制+课堂实训”双教学需求
  • python逆向还原dnspy反编译的C#算法
  • 数学建模--最短路径算法的Python实现
  • webpack学习(一)基本配置
  • Oracle 遍历变量游标
  • C++11新特性① | C++11 常用关键字实战详解
  • VUE3学习小记(2)- ref 与 reactive