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

上海移动云网站建设自己做网站翻译服务器 - 添加网站

上海移动云网站建设,自己做网站翻译服务器 - 添加网站,wordpress退出维护,手机销售网站的设计与实现1. 模式说明 单例模式保证类只有一个实例;创建一个对象,当你创建第二个对象的时候,此时你获取到的是已经创建过的对象,而不是一个新的对象; 1.1 使用场景 共享资源的访问权限;任务的管理类;数…

1. 模式说明

单例模式保证类只有一个实例;创建一个对象,当你创建第二个对象的时候,此时你获取到的是已经创建过的对象,而不是一个新的对象;

1.1 使用场景

共享资源的访问权限;任务的管理类;数据库的操作等;

1.2 要素

  • 私有化类的构造函数;
  • 使用类的私有静态指针变量指向类的唯一实例
  • 公有静态方法获取该实例;

1.3 类型

  • 懒汉模式
  • 饿汉模式

2. 懒汉模式

单例实例在第一次被使用时才进行初始化,延迟初始化

2.1 基本

示例

/** @brief         : design patterns singleton* @author        : your name* @compile       : g++ -g singleton_main.cc -o d -std=c++11* @date          : 2023/04/18* @lastEditorDate:   */#include <iostream>
#include <string>//懒汉模式
class Singleton
{
public:static Singleton*  getSingletonInstance()   //访问函数{if(instance == nullptr){instance = new Singleton;}return instance;}public:void addCount() {m_count++;}int32_t getCount() {return m_count;}private:static Singleton* instance;    //静态指针变量Singleton(){}    //私有化类的构造函数int32_t m_count{0};
};Singleton* Singleton::instance = nullptr;    //静态成员类外初始化int main(int argc, char* argv[])
{Singleton* single_0 = Singleton::getSingletonInstance();single_0->addCount();std::cout<<"single_0 value is: "<<single_0->getCount()<<std::endl<<std::endl;Singleton* single_1 = Singleton::getSingletonInstance();single_1->addCount();std::cout<<"single_0 value is: "<<single_0->getCount()<<std::endl;std::cout<<"single_1 value is: "<<single_1->getCount()<<std::endl<<std::endl;    return 0;
}

输出

single_0 value is: 1single_0 value is: 2
single_1 value is: 2

2.2 线程安全

2.1中的示例是线程不安全的,假如有多个线程同时调用getSingletonInstance(),此时检测到instance是nullptr,就会导致单例的崩溃,造成内存泄漏;

通过加锁来实现
示例

/** @brief         : design patterns singleton* @author        : your name* @compile       : g++ -g singleton_main.cc -o d -std=c++11* @date          : 2023/04/18* @lastEditorDate:   */#include <iostream>
#include <string>
#include <mutex>//懒汉模式
std::mutex mtx;  //全局的锁
class Singleton
{
public:static Singleton*  getSingletonInstance()   //访问函数{if(instance == nullptr){std::lock_guard<std::mutex> guard(mtx); if(instance == nullptr){instance = new Singleton;}            }return instance;}public:void addCount() {m_count++;}int32_t getCount() {return m_count;}private:    static Singleton* instance;    //静态指针变量Singleton(){}    //私有化类的构造函数int32_t m_count{0};
};
Singleton* Singleton::instance = nullptr;    //静态成员类外初始化int main(int argc, char* argv[])
{Singleton* single_0 = Singleton::getSingletonInstance();single_0->addCount();std::cout<<"single_0 value is: "<<single_0->getCount()<<std::endl<<std::endl;Singleton* single_1 = Singleton::getSingletonInstance();single_1->addCount();std::cout<<"single_0 value is: "<<single_0->getCount()<<std::endl;std::cout<<"single_1 value is: "<<single_1->getCount()<<std::endl<<std::endl;    return 0;
}

输出

single_0 value is: 1single_0 value is: 2
single_1 value is: 2

使用 c++11 中局部静态变量是线程安全的性质

示例

/** @brief         : design patterns singleton* @author        : your name* @compile       : g++ -g singleton_main.cc -o d -std=c++11* @date          : 2023/04/18* @lastEditorDate:   */#include <iostream>
#include <string>
#include <mutex>//懒汉模式
class Singleton
{
public:static Singleton* getSingletonInstance()   //访问函数{static Singleton instance;    //静态指针变量return &instance;}public:void addCount() {m_count++;}int32_t getCount() {return m_count;}private:  Singleton(){}    //私有化类的构造函数int32_t m_count{0};
};int main(int argc, char* argv[])
{Singleton* single_0 = Singleton::getSingletonInstance();single_0->addCount();std::cout<<"single_0 value is: "<<single_0->getCount()<<std::endl<<std::endl;Singleton* single_1 = Singleton::getSingletonInstance();single_1->addCount();std::cout<<"single_0 value is: "<<single_0->getCount()<<std::endl;std::cout<<"single_1 value is: "<<single_1->getCount()<<std::endl<<std::endl;    return 0;
}

输出

single_0 value is: 1single_0 value is: 2
single_1 value is: 2

3. 饿汉模式

指单例实例在程序运行时被立即执行初始化

示例

/** @brief         : design patterns singleton* @author        : your name* @compile       : g++ -g singleton_main.cc -o d -std=c++11* @date          : 2023/04/18* @lastEditorDate:   */#include <iostream>
#include <string>
#include <mutex>//饿汉模式
class Singleton
{
public:static Singleton*  getSingletonInstance()   //访问函数{        return instance;}public:void addCount() {m_count++;}int32_t getCount() {return m_count;}private:static Singleton* instance;    //静态指针变量Singleton(){}    //私有化类的构造函数int32_t m_count{0};
};Singleton* Singleton::instance = new Singleton;    //静态成员类外初始化int main(int argc, char* argv[])
{Singleton* single_0 = Singleton::getSingletonInstance();single_0->addCount();std::cout<<"single_0 value is: "<<single_0->getCount()<<std::endl<<std::endl;Singleton* single_1 = Singleton::getSingletonInstance();single_1->addCount();std::cout<<"single_0 value is: "<<single_0->getCount()<<std::endl;std::cout<<"single_1 value is: "<<single_1->getCount()<<std::endl<<std::endl;    return 0;
}

输出

single_0 value is: 1single_0 value is: 2
single_1 value is: 2

4. 在开发过程中的使用

在项目的使用过程中,可以将单例设计成为类模板;这样其它类在设计的时候不用考虑,是否需要将其设计成为单例;

其它类如果需要单例属性,只需要通过单例模板对其进行赋能即可;

示例

/** @brief         : design patterns singleton* @author        : your name* @compile       : g++ -g singleton_main.cc -o d -std=c++11* @date          : 2023/04/18* @lastEditorDate:   */#include <iostream>
#include <string>
#include <mutex>template<class T>
class Singleton
{
public:static T* getSingletonInstance()   //访问函数{static T instance;    //静态指针变量return &instance;}
private:  Singleton(){}    //私有化类的构造函数
};class C1
{
public:void addCount() {m_count++;}int32_t getCount() {return m_count;}    private:    int32_t m_count{0};
};int main(int argc, char* argv[])
{auto re1 = Singleton<C1>::getSingletonInstance();re1->addCount();std::cout<<"re1->getCount() value is: "<<re1->getCount()<<std::endl;auto re2 = Singleton<C1>::getSingletonInstance();re2->addCount();std::cout<<"re1->getCount() value is: "<<re1->getCount()<<std::endl;std::cout<<"re2->getCount() value is: "<<re2->getCount()<<std::endl;return 0;
}

输出


re1->getCount() value is: 1
re1->getCount() value is: 2
re2->getCount() value is: 2
http://www.yayakq.cn/news/982990/

相关文章:

  • 长春专业做网站代运营公司收费
  • 山东城乡住房建设厅网站有哪些可以推广的平台
  • 如何用个门户网站做销售济南百度做网站
  • 如何构建一个电子商务网站高端建站选哪家
  • 网站被域名重定向昆明外贸网站设计服务商
  • 邢台网站制作哪家好最好的销售管理系统
  • 山东手机网站建设公司山东企业网站建设
  • 专题网站开发报价qq号码免费申请注册
  • wordpress 站点维护动漫视频制作软件
  • 安全网络公司排名谷歌seo课程
  • 建设局查询网站开微信小程序要钱吗
  • 统一管理网站系统食品公司网站设计项目
  • 贵阳装饰装修公司网站云南省建设工程标准定额网站
  • 网站域名管理海宁市建设局官方网站
  • 互联网站备案管理工作方案 工信部深圳网站设计哪家比较好
  • 查询商品价格走势的网站中建集团官网
  • 购物商城建设网站wordpress多站点插件
  • 正阳县网站建设网页设计与制作报告模板
  • 网站推广的网站作用centos打开wordpress
  • 企业网站建设内容绚丽的网站
  • 广西新站seo郑州聚商网络科技有限公司
  • 网站建站哪个公司好一点如何判断网站是不是自适应
  • 常德建设局网站房地产信息网上查询系统
  • 淘宝优惠劵网站建设提供建议的网站模板
  • 如何增加网站关键词库wordpress备份插件中文
  • 贵阳专用网站建设整站seo免费咨询
  • 德清网站制作网站推广方案设计
  • 手机怎么自创网站哪些编程语言适合网站开发
  • 免费建自己域名的网站吗wordpress网速慢
  • 滁州市建设工程质量监督站网站如何做免费音乐网站