Singleton in C++11 style
#include <iostream>
#include <memory>
#include <mutex> class SingletonOld {
static std::shared_ptr<SingletonOld> handle_;
static std::mutex handle_mutex_; int data_ = 0; public:
static auto create() {
std::lock_guard<std::mutex> lock(handle_mutex_);
if (handle_ == nullptr) {
handle_.reset(new SingletonOld); // Using `make_shared` is error, as `SingletonOld` constructor is private
// to `shared_ptr`, `allocator` and any class else.
// handle_ = std::make_shared<SingletonOld>();
}
return handle_;
} int get_data() { return data_; }
void set_data(int data) { data_ = data; } private:
SingletonOld(const SingletonOld &) = delete;
SingletonOld &operator=(const SingletonOld &) = delete; SingletonOld() {};
}; std::shared_ptr<SingletonOld> SingletonOld::handle_;
std::mutex SingletonOld::handle_mutex_; class Singleton {
int data_ = 0; public:
static Singleton &create() {
// 1. C++11: If control enters the declaration concurrently while the
// variable is being initialized, the concurrent execution shall wait for
// completion of the initialization.
// 2. Lazy evaluation.
static Singleton s; return s;
} int get_data() { return data_; }
void set_data(int data) { data_ = data; } private:
Singleton(const Singleton &) = delete;
Singleton &operator=(const Singleton &) = delete; Singleton() {}
}; int main() {
auto p = SingletonOld::create();
std::cout << p->get_data() << std::endl; // 0
p->set_data(1);
auto q = p;
std::cout << q->get_data() << std::endl; // 1 Singleton &s = Singleton::create();
Singleton &r = s;
r.get_data();
std::cout << s.get_data() << std::endl; // 0
s.set_data(1);
std::cout << r.get_data() << std::endl; // 1 return 0;
}
Singleton in C++11 style的更多相关文章
- Google C++ Style Guide在C++11普及后的变化
转 http://www.cnblogs.com/chen3feng/p/5972967.html?from=timeline&isappinstalled=0&lwfrom=user ...
- IE10 11的css hack
一.@media -ms-high-contrast @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none){ ...
- .NET设计模式(2):单件模式(Singleton Pattern)
转载:http://terrylee.cnblogs.com/archive/2005/12/09/293509.html 单件模式(Singleton Pattern) --.NET设计模式系列之二 ...
- C++ 11和C++98相比有哪些新特性
此文是如下博文的翻译: https://herbsutter.com/elements-of-modern-c-style/ C++11标准提供了许多有用的新特性.这篇文章特别针对使C++11和C++ ...
- C++11:使用 auto/decltype/result_of使代码可读易维护
C++11 终于加入了自动类型推导.以前,我们不得不使用Boost的相关组件来实现,现在,我们可以使用"原生态"的自动类型推导了! C++引入自动的类型推导,并不是在向动态语言(强 ...
- C++闭包: Lambda Functions in C++11
表达式无疑是C++11最激动人心的特性之一!它会使你编写的代码变得更优雅.更快速! 它实现了C++11对于支持闭包的支持.首先我们先看一下什么叫做闭包 维基百科上,对于闭包的解释是: In progr ...
- [转载]如何在C++03中模拟C++11的右值引用std::move特性
本文摘自: http://adamcavendish.is-programmer.com/posts/38190.htm 引言 众所周知,C++11 的新特性中有一个非常重要的特性,那就是 rvalu ...
- Singleton(单例)
意图: 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 适用性: 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时. 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代 ...
- C++中多线程与Singleton的那些事儿
前言 前段时间在网上看到了个的面试题,大概意思是如何在不使用锁和C++11的情况下,用C++实现线程安全的Singleton. 看到这个题目后,第一个想法就是用Scott Meyer在<Effe ...
随机推荐
- Android 用HorizontalScrollView实现ListView的Item滑动删除 ,滑动错乱 冲突
用HorizontalScrollView实现类似微信的滑动删除 测试于:Android2.2+ 对于Android来说按键操作已经在减少,越来越多的手势操作层出不穷,今天介绍一款LIstView的I ...
- JVM & Server & Connector & Context Relationship
- Linux学习三:Ubuntu下使用minicom和开发板通信
备注:如果你是用的是Windows则使用超级终端即可:开始-程序-附件-通讯-超级终端 现在我们在Ubuntu下安装配置minicom: 1.进入ubuntu桌面ctrl+alt+t打开终端 输入:s ...
- setContentType、setCharacterEncoding、pageEncoding和contentType
request.setCharacterEncoding()是设置从request中取得的值或从数据库中取出的值 response.setContentType("text/html;cha ...
- gulp.js基础入门
安装 Node 去 nodejs.org 根据系统选择性按照教程安装Node. 创建项目 创建项目文件夹 进入项目文件夹 初始化项目 使用npm命令:npm init,根据提示完成. 安装 Gulp ...
- Salesforce 使用Js 调用Webservice实例
1,创建 Custom Button 在页面上 2, 创建CustomJs 代码调用Webservice <!--参数名区分大小写,对于跨层object直接在Object名后直接加参字段名即可- ...
- zendstudio快捷键复制行Ctrl+Alt+向下无效的解决方法
今天不断地在百度输入类似"zendstudio快捷键复制行Ctrl+Alt+向下无效"这样的关键字,里面搜索到的内容都是在说系统的显卡驱动Ctrl+Alt+方向键和ZendStud ...
- Nodejs学习(二)-express生成器
1.安装生成器 sudo npm install express-generator -g 2.做ln链接,这个我就不介绍了,可以参照上个随笔,指向/usr/local/bin就行. 3.生成项目文件 ...
- PHP+Mysql+jQuery实现文件下载次数统计
数据表 CREATE TABLE IF NOT EXISTS `downloads` ( `id` int(6) unsigned NOT NULL AUTO_INCREMENT, `file ...
- 【转】jqGrid 各种参数 详解
[原文]http://www.cnblogs.com/younggun/archive/2012/08/27/2657922.htmljqGrid 各种参数 详解 JQGrid JQGrid是一个 ...