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

木渎网站制作做旅游的网站

木渎网站制作,做旅游的网站,网站首页横版图怎么做,双阳区住房和城乡建设局网站单例模式即保证一个类只有一个实例&#xff0c;并提供一个访问该单例的接口。 实例 1.懒汉式 用的时候才创建单例&#xff0c;“懒”。 Singleton.h #ifndef SINGLETON_H_ #define SINGLETON_H_#include <iostream> #include <string> #include <mutex>…

单例模式即保证一个类只有一个实例,并提供一个访问该单例的接口。

实例

1.懒汉式

用的时候才创建单例,“懒”。

Singleton.h

#ifndef SINGLETON_H_
#define SINGLETON_H_#include <iostream>
#include <string>
#include <mutex>class Singleton {public:static Singleton* GetInstance() {if (instance_ == nullptr) {// 加锁保证多个线程并发调用getInstance()时只会创建一个实例m_mutex_.lock();if (instance_ == nullptr) {instance_ = new Singleton();}m_mutex_.unlock();}return instance_;}private:Singleton() {}static Singleton* instance_;static std::mutex m_mutex_;
};#endif  // SINGLETON_H_

这就是双重检验锁,保障了线程安全。第一个判空可加速判断是否已有单例,第二个锁内的判空是为了解决多线程问题(两个线程同时走到lock,且instance_都为nullptr)。

Singleton.cpp

#include "Singleton.h"// 静态变量instance初始化不要放在头文件中, 如果多个文件包含singleton.h会出现重复定义问题
Singleton* Singleton::instance_ = nullptr;
std::mutex Singleton::m_mutex_;

main.cpp

#include <iostream>
#include "Singleton.h"int main() {Singleton *s1 = Singleton::GetInstance();Singleton *s2 = Singleton::GetInstance();std::cout << "s1地址: " << s1 << std::endl;std::cout << "s2地址: " << s2 << std::endl;return 0;
}

编译运行:

$g++ -g main.cpp Singleton.cpp -std=c++11 -o singleton
$./singleton 
s1地址: 0x95a040
s2地址: 0x95a040

2. 饿汉式

类初始化就创建单例,GetInstance()只是获取动作,“饿”。 

Singleton.h

#ifndef SINGLETON_H_
#define SINGLETON_H_class Singleton {public:static Singleton* GetInstance() {return instance_;}private:Singleton() {}static Singleton* instance_;
};#endif  // SINGLETON_H_

Singleton.cpp

#include "Singleton.h"Singleton* Singleton::instance_ = new Singleton();

main.cpp

#include <iostream>
#include "Singleton.h"int main() {Singleton *s1 = Singleton::GetInstance();Singleton *s2 = Singleton::GetInstance();std::cout << "s1地址: " << s1 << std::endl;std::cout << "s2地址: " << s2 << std::endl;return 0;
}

编译运行:

$g++ -g main.cpp Singleton.cpp -std=c++11 -o singleton
$./singleton 
s1地址: 0x18a8040
s2地址: 0x18a8040

3. Meyers' Singleton

Meyers' Singleton是Scott Meyers提出的C++单例的推荐写法。它将单例对象作为局部static对象定义在函数内部: 

#ifndef SINGLETON_H_
#define SINGLETON_H_class Singleton {public:static Singleton& GetInstance() {static Singleton instance;return instance;}Singleton(const Singleton&) = delete;Singleton& operator=(const Singleton&) = delete;private:Singleton() {}
};#endif  // SINGLETON_H_

需要C11支持(C11保证static成员初始化的线程安全)

http://www.yayakq.cn/news/149410/

相关文章:

  • 网站的电子地图怎么做婚庆策划公司排名
  • 设计好的免费网站建设论坛网站开发开题报告
  • 内江网站开发商业设计
  • 专业网站策划去大连需要下载什么软件
  • 怎么制作网站建设网站首页备案号链接
  • 做物流百度网站电子商务网站建设 市场分析
  • 东莞营销网站建设费用百度上怎么做推广
  • 做网站公司名字应该用图片吗城乡建设部网站首页上海
  • 网站建设 案例宁波网络推广seo软件
  • 可以免费建设网站网站平台建设服务合同
  • 长沙哪家网站公司如何注册域名网站
  • 电子商务网站开发的历程上海工程建设招投标网站
  • 做国际贸易需要网站吗用wordpress搭建目录网站
  • 三亚网站制作公司域名申请时间需要多久
  • 可以免费做兼职的网站有哪些wordpress构建自定义设置页面
  • 公司网站首页怎么做小视频的网站怎么做的
  • 哈尔滨做设计和网站的公司专业团队高清壁纸
  • 如何别人看自己做的网站怎么查看什么公司做的网站
  • 网站作业代做企业网站大全
  • 湖北网站建设价格加强网站建设 通知
  • 搜索引擎查关键词排名的软件盐城整站优化
  • 如何做简单的网站 域名邮箱做竞价网站用什么系统好
  • asp做网站上传文件系统自助建站什么意思
  • dw做汽车网站房屋装修网站模板
  • 在线答题网站怎么做wordpress影音
  • 有做思维图的网站吗做网站销售 优帮云
  • asp.net网站开发 vs2017wordpress内容分页在哪改
  • 选一个网站做seowordpress to微博
  • 海口网站建设流程跨境电商个人可以开店吗
  • 网站开发分析报告建筑网站招聘