一个基于C++11的单例模板类

 1 #ifndef _SINGLETON_H_
 2 #define _SINGLETON_H_
 3
 4 #include <mutex>
 5 #include <memory>
 6
 7 template<typename T>
 8 class Singleton {
 9 public:
10   template <typename... ArgTypes>
11   static T* getInstance(ArgTypes... args) {
12     static std::once_flag of;
13     std::call_once(of, init(std::forward<Args>(args)...));
14
15     return instance_.get();
16   }
17 private:
18   Singleton() = delete;
19   ~Singleton() = delete;
20   Singleton(const Singleton&) = delete;
21   Singleton(Singleton&&) = delete;
22   Singleton& operator=(const Singleton&) = delete;
23   Singleton& operator=(Singleton&&) = delete;
24
25   template <typename... ArgTypes>
26   static void init(ArgTypes... args) {
27     instance_.reset(new T(std::forward<ArgTypes>(args)...));
28   }
29
30   static std::unique_ptr<T> instance_;
31 };
32
33 template<class T>
34 std::unique_ptr<T> Singleton<T>::instance_ = nullptr;
35
36 #endif

原文地址:https://www.cnblogs.com/CodeComposer/p/9485037.html

时间: 2024-11-05 22:50:53

一个基于C++11的单例模板类的相关文章

分享一个线程安全的单例模板类

单例模式应该说是最简单的设计模式了.在此分享一个线程安全的单例模板类. template <typename Type> class CSingleton { public: static Type* GetInstance() { // kBeingCreatedMarker用来表示单例实例正在创建过程中. // 此处初始化为1是因为操作系统不会分配地址为1的指针. static const volatile intptr_t kBeingCreatedMarker = 1; // 如果m_

求教C++单例模板类的问题eZ98

代码如下:编译时出现链接错误:各位大大们来看下这是什么一个情况? http://weibo.com/p20180109p/1001604191068680786935焊破巴EEG13P佑菊等卦 http://weibo.com/p20180109p/1001604188414684566397孔鞠勘QRTdMu床枪可两 http://weibo.com/p20180109p/1001604184711873335681搪斜镁UYIT9g环亩优僬 http://weibo.com/p2018010

C++可继承的单例基类模板

目录 一.介绍 二.代码 三.关键处 四.使用限制 五.参考资料 一.介绍 最近在写一个项目,其中用到好几个单例,类本身的设计不是很复杂,但是如果每个都写一遍单例又觉得有点冗余:所以查资料写了一个单例基类模板,只要一个类继承这个基类并且以自身作为模板参数就可以实现一个单例:关于单例本身的介绍在这里不重点介绍. 特点: RAII,使用 std::shared_ptr来管理资源 线程安全,加了锁 以上特性基于C++11 二.代码 // bridf: a singleton base class of

Singleton 单例模板

1 // singleton.h 2 3 #ifndef SINGLETON_H 4 #define SINGLETON_H 5 6 // 单例基类模板 7 template <class T> 8 class Singleton 9 { 10 public: 11 static T& give_me() 12 { 13 static T s_inst; 14 return s_inst; 15 } 16 17 private: 18 // 禁止实现拷贝构造与拷贝赋值函数 19 exp

C++ 单链表模板类实现

单链表的C语言描述 基本运算的算法--置空表.求表的长度.取结点.定位运算.插入运算.删除运算.建立不带头结点的单链表(头插入法建表).建立带头结点的单链表(尾插入法建表),输出带头结点的单链表 #include<cstdio>#include<iostream>using namespace std;template <class T>class Linklist{private: struct node { T date; node * next; node():n

C#编写了一个基于Lucene.Net的搜索引擎查询通用工具类:SearchEngineUtil

最近由于工作原因,一直忙于公司的各种项目(大部份都是基于spring cloud的微服务项目),故有一段时间没有与大家分享总结最近的技术研究成果的,其实最近我一直在不断的深入研究学习Spring.Spring Boot.Spring Cloud的各种框架原理,同时也随时关注着.NET CORE的发展情况及最新技术点,也在极客时间上订阅相关的专栏,只要下班有空我都会去认真阅读观看,纸质书箱也买了一些,总之近一年都是在通过:微信技术公众号(.NET.JAVA.算法.前端等技术方向).极客时间.技术书

php单例模式实现对象只被创建一次 mysql单例操作类

这是我在php面试题中遇到的一道试题,单例模式按字面来看就是某一个类只有一个实例,这样做的好处还是很大的,比如说数据库的连接,我们只需要实例化一次,不需要每次都去new了,这样极大的降低了资源的耗费. 单例类至少拥有以下三种公共元素: 必须拥有一个构造函数,并且必须被标记为private. 拥有一个保存类的实例的静态成员变量. 拥有一个访问这个实例的公共的静态方法 具体使用方面,在下面php实例中注释的很清楚: 1 <?php 2 /** 3 * by www.phpddt.com 4 */ 5

网络加载数据及单例工具类的代码抽取

今天给大家分享一一下网络加载数据:先看代码吧-------------------------- - (void)diseaseNumWithFinishedBlock:(FinishedBlocks)finishedBlock{ NSString *urlStr = @"http://数据接口"; NSDictionary *prama = @{响应参数}; [[NetWorkTool sharedNetWorkTool] POST:urlStr parameters:prama p

创建单例实体类

package xiancheng;/** * 单例创建的方式 * 1.懒汉式 * 2.饿汉式 * 3.利用内部类的方式 * @author User * */ public class lianxi18 {}/** * 加入内部类的形式 类在使用的形式才加载 延缓加载时间 * @author User * */class demo03 { private static class jvmholder{ public static demo03 instance=new demo03(); }