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

十个实用网站网址网站备案接入ip

十个实用网站网址,网站备案接入ip,eyoucms模板,自己做的网站如何被百度检索单例模式 一、概述1. 特点2. 实现方式3. 应用场景 二、实现代码1. 静态局部变量的懒汉单例2. 加锁的懒汉式单例3. 使用 C11 中的 std::call_one 的懒汉单例4. 饿汉式单例 一、概述 这里记录一下单例模式的最常用使用#xff0c;单例模式#xff08;Single Pattern#xff0… 单例模式 一、概述1. 特点2. 实现方式3. 应用场景 二、实现代码1. 静态局部变量的懒汉单例2. 加锁的懒汉式单例3. 使用 C11 中的 std::call_one 的懒汉单例4. 饿汉式单例 一、概述 这里记录一下单例模式的最常用使用单例模式Single Pattern是一种常用的软件设计模式它属于创建型模式。单例模式的定义是确保一个类仅有一个实例并提供一个全局访问点来获取这个唯一的实例。该模式的核心在于控制实例的数目使得在整个系统中该类只被实例化一次。 1. 特点 单例类只能有一个实例这是单例模式最基本的要求确保类的全局唯一性。单例类必须自行创建自己的唯一实例这通常通过私有化构造函数来实现防止外部通过new关键字直接创建实例。单例类必须给所有其他对象提供这一实例这通常通过一个静态的公有方法来实现该方法负责返回类的唯一实例。 2. 实现方式 单例模式有多种实现方式其中最典型的是懒汉式和饿汉式。 懒汉式在真正需要使用对象时才去创建该单例类对象。这种方式在类加载时不会立即创建实例而是在首次调用getInstance()方法时才创建并通过加锁如synchronized关键字来保证多线程环境下的线程安全。但这种方式在多线程环境下存在性能问题因为每次调用getInstance()方法时都需要进行同步判断。 饿汉式在类加载时已经创建好该单例对象等待程序使用。这种方式因为实例在类加载时就已经创建好了所以不需要进行同步判断是线程安全的。但这种方式在类加载时就占用了内存资源如果单例对象体积较大或者类加载顺序不确定时可能会浪费内存资源。 除了懒汉式和饿汉式外还有枚举式、双重校验锁式、静态内部类式等多种单例模式的实现方式。这些方式各有优缺点可以根据实际需求和场景选择适合的实现方式。 3. 应用场景 单例模式适用于以下场景 全局唯一性当需要控制某个类的实例数目为1时可以使用单例模式。共享资源当多个对象需要共享一个资源时可以将该资源设计为单例模式以避免资源的重复创建和浪费。配置信息如应用程序的配置信息、全局缓存等可以设计为单例模式以便于全局访问和管理。 二、实现代码 1. 静态局部变量的懒汉单例 这个是线程安全的因为静态局部变量的创建方式天然是线程安全的不存在线程不安全的问题我基本上只用这个 class Single { public:static Single GetInstance(); // 获取单实例对象void Print(); // 打印实例地址 private: Single(); // 禁止外部构造~Single(); // 禁止外部析构Single(const Single single) delete; // 禁止外部拷贝构造Single(const Single ) delete; // 禁止右值拷贝构造const Single operator(const Single single) delete; // 禁止外部赋值操作 };Single Single::GetInstance(){/*** 静态局部变量只在当前函数内有效其他函数无法访问。* 静态局部变量只在第一次被调用的时候初始化也存储在静态存储区生命周期从第一次被初始化起至程序结束止。*/static Single single;return single; }void Single::Print(){std::cout 实例内存地址: this std::endl; }Single::Single() {std::cout 构造函数 std::endl; }Single::~Single() {std::cout 析构函数 std::endl; }2. 加锁的懒汉式单例 加锁的懒汉式实现 class Single { public:static Single *GetInstance(); // 获取单实例对象static void deleteInstance(); //释放单实例进程退出时调用void Print(); // 打印实例地址 private:Single(); // 将其构造和析构成为私有的, 禁止外部构造和析构~Single();Single(const Single signal); // 将其拷贝构造和赋值构造成为私有函数, 禁止外部拷贝、赋值、右值拷贝构造Single(const Single ) delete;const Single operator(const Single signal); private:static Single *m_Single; // 实例对象指针static std::mutex m_Mutex; // 互斥锁 };//初始化静态成员变量 Single *Single::m_Single nullptr; std::mutex Single::m_Mutex;// 注意不能返回指针的引用否则存在外部被修改的风险 Single * Single::GetInstance(){// 这里使用了两个 if 判断语句的技术称为双检锁好处是只有判断指针为空的时候才加锁// 避免每次调用 GetInstance的方法都加锁锁的开销毕竟还是有点大的。if (m_Single nullptr){std::unique_lockstd::mutex lock(m_Mutex); // 加锁if (m_Single nullptr){volatile auto temp new (std::nothrow) Single();m_Single temp;}}return m_Single; }void Single::deleteInstance(){std::unique_lockstd::mutex lock(m_Mutex); // 加锁if (m_Single){delete m_Single;m_Single nullptr;} }void Single::Print(){std::cout 实例内存地址: this std::endl; }Single::Single(){std::cout 构造函数 std::endl; }Single::~Single(){std::cout 析构函数 std::endl; }使用智能指针 #include iostream #include memory #include mutexclass Single { public:static std::shared_ptrSingle GetInstance();void print() {std::cout Hello World. std::endl;}~Single() {std::cout 析构函数 std::endl;}private:Single() {std::cout 构造函数 std::endl;} };static std::shared_ptrSingle Single nullptr; static std::mutex SingleMutex;std::shared_ptrSingle Single::GetInstance() {if (Single nullptr) {std::unique_lockstd::mutex lock(SingleMutex);if (Single nullptr) {volatile auto temp std::shared_ptrSingle(new Single());Single temp;}}return Single; }3. 使用 C11 中的 std::call_one 的懒汉单例 #include iostream #include memory #include mutexclass Single { public:static std::shared_ptrSingle GetInstance();void print() {std::cout Hello World. std::endl;}~Single() {std::cout 析构函数 std::endl;}private:Single() {std::cout 构造函数 std::endl;} };static std::shared_ptrSingle Single nullptr; static std::once_flag SingleFlag;std::shared_ptrSingle Single::GetInstance() {std::call_once(SingleFlag, [] {Single std::shared_ptrSingle(new Single());});return Single; }4. 饿汉式单例 class Singleton{ public: static Singleton* GetInstance(); // 获取单实例static void deleteInstance(); // 释放单实例进程退出时调用void Print(); // 打印实例地址 private: Singleton(); // 将其构造和析构成为私有的, 禁止外部构造和析构~Singleton();Singleton(const Singleton signal); // 将其拷贝构造和赋值构造成为私有函数, 禁止外部拷贝和赋值Single(const Single ) delete;const Singleton operator(const Singleton signal);private: static Singleton *m_pSingleton; // 单例指针 };// 代码一运行就初始化创建实例 本身就线程安全 Singleton* Singleton::m_pSingleton new (std::nothrow) Singleton();Singleton* Singleton::GetInstance(){return m_pSingleton; }void Singleton::deleteInstance(){if (m_pSingleton) {delete m_pSingleton;m_pSingleton nullptr;} }void Singleton::Print(){std::cout 实例内存地址: this std::endl; }Singleton::Singleton(){std::cout 构造函数 std::endl; }Singleton::~Singleton(){std::cout 析构函数 std::endl; }
http://www.hkea.cn/news/14433573/

相关文章:

  • 杭州江干网站建设做网站购买空间多少钱
  • 网站建设销售培训广告创意设计的影响因素
  • 建设银行网站怎么打印明细做旅游去哪个网站找图
  • 琪恋网站建设网页设计代码常用单词
  • 广西 网站建设深圳网站平台
  • 怎样做公司的网站建设做网站笔记本2014
  • 信息化建设 网站iis网站wordpress登陆
  • 青海省建设厅网站公示公告百度免费建个人网站
  • 虚拟商城网站深圳网站优化方案
  • 管局审核一定要能打开网站徐州低成本建站
  • 站外推广策划书十大个人博客网站
  • 云南网站优化哪家好老网站怎么优化
  • 网站图片链接到视频怎么做淘客cms系统
  • 海原电商网站建设中国网络科技公司排名
  • cgi做网站如何自己注册网站
  • 怎么开一个网站平台怎么在静态网站基础上加动态
  • 网站功能表濮阳网站建设价格
  • 全球外贸网站有哪些网站改版建设征求意见书
  • 湛江市企业网站seo点击软件王也个人资料
  • 网站建设哪个空间比较好源代码网站开发
  • 深圳网站建设推广优化网站五合一建设
  • 网站建设用什么软件wordpress网站制作教程视频
  • 西安做网站首选营销型 网站建设流程
  • 潞城网站建设漳州违法建设举报网站
  • 做淘宝返利网站能挣钱删除 wordpress
  • 做网站小图标大全网店培训班
  • 网站排名的重要性潍坊百度关键词排名
  • 陕西城乡建设部网站首页房地产信息网查询
  • psd企业网站模板1g内存vps 开电影网站
  • 校园超市网站开发理财产品网站开发文档