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

番禺外贸型网站建设爱网站最新发布址

番禺外贸型网站建设,爱网站最新发布址,重庆网络干部学院,深圳品牌设计公司招聘链接:C 设计模式 链接:C 设计模式 - 享元模式 单例模式(Singleton Pattern)是创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。单例模式在需要全局共享资源或控制实例数量的…

链接:C++ 设计模式
链接:C++ 设计模式 - 享元模式

单例模式(Singleton Pattern)是创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。单例模式在需要全局共享资源或控制实例数量的场景中非常有用,例如数据库连接、日志记录器等。

1.问题分析

在开发中,有些对象需要全局唯一的实例。例如:

  • 配置管理器:应用程序的配置通常需要全局唯一的实例,以确保配置的一致性。
  • 日志记录器:日志记录器需要全局唯一的实例,以便集中管理日志输出。
  • 线程池:线程池需要全局唯一的实例,以便高效地管理线程资源。
  • 数据库连接池:数据库连接池需要全局唯一的实例,以便复用数据库连接,减少连接创建和销毁的开销。

如果这些对象被多次创建,会导致以下问题:

  • 资源浪费:每次创建新实例都会消耗系统资源,导致资源浪费。
  • 状态不一致:多个实例之间的状态可能不一致,导致程序行为不可预测。
  • 管理复杂:多个实例的管理和维护变得复杂,增加了代码的复杂性和维护成本。

为了避免上述问题,我们需要一种机制来确保某个类只有一个实例,并提供一个全局访问点来访问该实例。这就是单例模式的核心需求。

2.实现步骤

  1. 私有化构造函数:将类的构造函数、拷贝构造函数和赋值运算符设为私有,防止外部创建实例。
  2. 定义静态成员变量:用于存储单例对象的唯一实例。
  3. 提供公共静态方法:提供全局访问点来获取单例对象的唯一实例。

3.代码示例

3.1.简单形式

class Singleton {public:// 删除拷贝构造函数和赋值运算符,防止复制单例对象Singleton(const Singleton&) = delete;Singleton& operator=(const Singleton&) = delete;// 获取单例实例的公共静态方法static Singleton& getInstance() {// 使用局部静态变量来实现线程安全的单例模式static Singleton instance;return instance;}// 示例方法,显示单例实例的地址void showMessage() { std::cout << "Singleton instance address: " << this << std::endl; }private:// 私有构造函数,防止外部创建实例Singleton() { std::cout << "Singleton instance created." << std::endl; }// 私有析构函数,防止外部删除实例~Singleton() { std::cout << "Singleton instance destroyed." << std::endl; }
};
int main() {// 获取单例实例并调用方法Singleton& singleton = Singleton::getInstance();singleton.showMessage();// 尝试获取另一个单例实例Singleton& anotherSingleton = Singleton::getInstance();anotherSingleton.showMessage();return 0;
}

3.2.指针形式

#include <memory>
#include <mutex>
#include <stdexcept>class Singleton {public:// 删除拷贝构造函数和赋值运算符,防止复制实例Singleton(const Singleton&) = delete;Singleton& operator=(const Singleton&) = delete;// 获取实例的静态方法static Singleton& getInstance() {if (!instance) {throw std::logic_error("Instance not yet initialized. Call initInstance() first.");}return *instance;}// 初始化实例的静态方法static void initInstance(int value) {std::call_once(initFlag, [&]() { instance.reset(new Singleton(value)); });}// 示例方法void showMessage() { std::cout << "Singleton instance address: " << this << std::endl; }private:// 私有化构造函数,防止外部创建实例Singleton(int value) : value_(value) { std::cout << "Singleton instance created with value: " << value_ << std::endl; }// 私有化析构函数,防止外部删除实例~Singleton() { std::cout << "Singleton instance destroyed." << std::endl; }// 静态智能指针成员变量,用于保存唯一的实例static std::unique_ptr<Singleton> instance;// 用于确保单例初始化的标志static std::once_flag initFlag;// 示例成员变量int value_;
};// 初始化静态成员变量
std::unique_ptr<Singleton> Singleton::instance = nullptr;
std::once_flag Singleton::initFlag;
int main() {// 初始化单例实例Singleton::initInstance(42);// 获取单例实例并调用方法Singleton& singleton = Singleton::getInstance();singleton.showMessage();// 再次获取单例实例并调用方法Singleton& singleton2 = Singleton::getInstance();singleton2.showMessage();return 0;
}
http://www.yayakq.cn/news/679106/

相关文章:

  • 做产地证的网站零基础自己建网站
  • 温州市手机网站制作哪家好成都网站制作方案
  • 网站建设需求设计建设通会员多少一年
  • 福州专业网站制作设计银川做网站哪家好
  • 网站建设前的问卷2网站制作
  • 基本网站建设知识网站建设公司对父亲节宣传口号
  • 北京建站者公司网站的开发技术
  • 企业网站建设的意义和效果宝格丽网站建设
  • 怎样使用网站后台的模板wordpress 管理员账号在哪里查询
  • 网站的制作wordpress重定向代码
  • 个人网站模板flash网站建设营业执照
  • wordpress网站登录被篡改深圳燃气公司
  • 郑州华久做网站合肥网站优化软件
  • 福建建设部网站thinkphp可以做网站吗
  • 凡客建站登陆建设企业网站的常见成本有哪些
  • 国外黄冈网站推广软件代发关键词包收录
  • dede一键更新网站出错白银网站运行
  • 工商企业信息查询网站南昌 定制网站
  • 小浣熊做单网站平面设计和网页设计哪个好
  • 做网站建设销售辛苦吗商务网站专题页
  • 哪个网站可以卖自己的设计永久3e38cos
  • 免费建设网站抽取佣金免费网站建设企业
  • 长沙营销型网站建设制作淘宝客网站做百度推广
  • 医生可以自己做网站吗高端网站开发费用
  • 设计公司企业站优化前网站现状分析
  • 网站开发 文件上传慢用asp.net做后台网站
  • 现在建设一个网站多少钱什么网站做h5做得好
  • 做网站能挣多少钱宣传片的拍摄思路
  • 网站建设开发软件有哪些wordpress 会员下载
  • 杭州商城网站建设网站推广的软文