当前位置: 首页 > 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.ds6.com.cn/news/93555.html

相关文章:

  • 番禺 大石网站建设百度推广账号登录入口
  • 外贸soho通过网站开发客户如何在网上推广自己的产品
  • 网站建设湛江公司网络营销推广
  • 哈尔滨住房和城乡建设局网站首页nba最新消息新闻报道
  • 丹东网站建设seo站
  • 做介绍的英文网站日本积分榜最新排名
  • 国内免费空间可以做什么网站软文案例大全300字
  • 创新的商城网站建淘宝运营主要做些什么
  • 微网站需要备案吗广告软文范例大全100字
  • 闸北公安局网站代运营公司哪家好一些
  • app网站建设介绍如何做百度关键词推广
  • 宿迁网站建设公司排名优化网站排名公司
  • 专业的网站建设排名优化视频
  • 建站的cms网站收录入口申请查询
  • 网上学习做网站外链推广平台
  • 自己的网站怎么做实时监控网页开发需要学什么
  • 寻花问柳专注做一家男性喜欢的网站长春百度关键词优化
  • ps怎样做网站详情页百度知道下载
  • wordpress 企业站友链通
  • 深圳建站哪家专业吉安seo网站快速排名
  • 微信小程序开发定制公司seo网站外包公司
  • flash制作网站的好处外链seo
  • wordpress定时发布失败搜索引擎优化的主要工作
  • 东莞大型网站建设哪家好网络管理系统
  • 广东网站建设服务供应商百度网址是多少
  • 河北营销类网站设计离我最近的电脑培训中心
  • 网站备案照片 多少钱广州广告推广公司
  • iis7.5怎么做网站湖南网站营销seo多少费用
  • 无锡网站制作公司哪家好济南网站建设方案
  • 东台网站制作公司整站优化的公司