C++11出来后,里面新增加了好多好用的功能

下面的单例就是使用了C++11中的标准库中的mutex和unique_prt 进行内存管理的.

此单例模式不用担心内存的释放问题

#pragma once
#include <memory>
#include <mutex>

template <class T>
class Singleton
{
public:
 typedef typename std::unique_ptr<T> handleType;
public:
 static handleType& GetInstance()
 {
  if (!ms_inst)
  {
   std::mutex m;
   std::lock_guard<std::mutex> lock(m);

ms_inst.reset(new T); //不要写成了ms_inst->reset(new T);

}

return ms_inst;
 }

//需要使用protected 关键字,不能使用private
protected:
 Singleton(){}
 Singleton(const Singleton& inst){}
 Singleton& operator=(const Singleton& inst){}

private:
 static handleType ms_inst;
};

//下面的初始化需要加 typename
template<class T>
typename Singleton<T>::handleType Singleton<T>::ms_inst;

c++11 实现单例模式的更多相关文章

  1. c++的单例模式及c++11对单例模式的优化

    单例模式 单例模式,可以说设计模式中最常应用的一种模式了,据说也是面试官最喜欢的题目.但是如果没有学过设计模式的人,可能不会想到要去应用单例模式,面对单例模式适用的情况,可能会优先考虑使用全局或者静态 ...

  2. C++11 单例类实现

    单例类: (1) 单例类保证全局只有一个唯一的实例对象. (2) 单例类保证只有唯一的接口获取这唯一实例. 非线程安全的单例类举例: class CSingleton { public: ~CSing ...

  3. Rxjava+Retrofit2+Okhttp3多文件上传(服务器端代码+客户端代码)

    所有代码亲测可用,如有问题,欢迎指正. 首先在ApiService接口文件中新建文件上传接口 public interface ApiService { static final String BAS ...

  4. java 23种设计模式教程

    设计模式分类 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模 ...

  5. python全栈开发 * 23 面向对象 知识点汇总 * 180704

    23 面向对象 -----特殊方法 1. isinstance(obj,类名) 判断对象是否是此类实例化或者此类的子类实例化出来的class A:passclass B(A):passb1=B()pr ...

  6. JAVA复习笔记01

    学了一学期的JAVA,临近期末,整理了一些JAVA考试中需要掌握的点,记录在这里. 1.编译多个JAVA文件,运行程序 (1) javac .java .java java Main (2) java ...

  7. php开发面试题---创建型设计模式1(创建型设计模式有哪几种)

    php开发面试题---创建型设计模式1(创建型设计模式有哪几种) 一.总结 一句话总结: 共五种:(简单工厂模式).工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 1.学设计模式最好的方 ...

  8. 地区sql

    /*Navicat MySQL Data Transfer Source Server : localhostSource Server Version : 50136Source Host : lo ...

  9. (原创)c++11改进我们的模式之改进单例模式

    我会写关于c++11的一个系列的文章,会讲到如何使用c++11改进我们的程序,本次讲如何改进我们的模式,会讲到如何改进单例模式.观察者模式.访问者模式.工厂模式.命令模式等模式.通过c++11的改进, ...

随机推荐

  1. Linux 之HTTP服务,APACHE

    1.基础知识 HTTP:超文本传输协议,超链接URI:Uniform Resource Identifier,全局范围内唯一命名符MIME:Multipurpose Internet Mail Ext ...

  2. Nginx系列一:信号与配置

    一.Nginx与信号 Nginx支持平滑重启,相比于Apache,修改了配置文件后可以不需要先停止程序,再重新启动. 1.启动 nginx –c nginx.conf 其中,-c nginx.conf ...

  3. mobx源码解读2

    我们将上节用到的几个类的构造器列举一下吧: function Reaction(name, onInvalidate) { if (name === void 0) { name = "Re ...

  4. 8.16 CSS知识点7

    display(元素显示模式) 语法: display : block | none | inline | inline-block display  属性用来设置元素的显示方式. block     ...

  5. MFC CEdit改变字体大小的方法

    方法很多,这里讲解两种比较简单的方法,也是从google上搜索来的. 方法一: CWnd* pEdit; pEdit = GetDlgItem(IDC_EDIT_ONE); ASSERT(pEdit ...

  6. Spring - constructor-arg和property

    1.说明 constructor-arg:通过构造函数注入.    property:通过setter对应的方法注入. 2.constructor-arg的使用示例 (1).Model代码: 1 2 ...

  7. perl中常见的语法规则和函数

    数值比较操作符         字符串 相等          ==                        eq 不等          !=                         ...

  8. python之路——面向对象(基础篇)

    面向对象编程:类,对象 面向对象编程是一种编程方式,此编程方式的落地需要使用 "类" 和 "对象" 来实现,所以,面向对象编程其实就是对 "类&quo ...

  9. sql server 数据遍历插入表变量

    )) DECLARE @str VARCHAR(MAX) ,) ,@start INT ,@end INT ,) SET @str = '1,2,3,4,5,6,7,8' SET @split = ' ...

  10. freeregex-0.01 使用文档

    -- freeregex,简化字符串处理 freeregex使用大体分为两个部分: 正则确定 功能操作 正则确定:共有EMAIL.IP等静态属性:anyOf(String regex)静态方法 :和o ...