c++11 实现单例模式

浪人 等级 634 0 0
标签: C/C++

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 typename Singleton::handleType Singleton::ms_inst;

收藏
评论区

相关推荐

创建型模式之单例设计模式
什么是单例设计模式? 顾名思义,只有一个实例。 单例模式它主要是确保一个类只有一个实例,并且可以提供一个全局的访问点。 废话少说,直接上干货了 单例模式之饿汉式 所谓饿汉式,顾名思义,“ 它很饿 ”。所以说,它一旦被加载进来,就会直接实例化一个对象。 例如: language class Singleton { private static fin
C++实现简单的单链表
下面实现的是一个简单的单链表 功能不多,学习使用 pragma once include <iostream using namespace std; class ListEx { private: struct Node { Node next; int data; Node
c++11 实现单例模式
C11出来后,里面新增加了好多好用的功能 下面的单例就是使用了C11中的标准库中的mutex和unique_prt 进行内存管理的. 此单例模式不用担心内存的释放问题 pragma once include <memory include <mutex template <class T class Singleton { public: ty
C 语言实例
30 个人在一条船上,超载,需要 15 人下船。 于是人们排成一队,排队的位置即为他们的编号。 报数,从 1 开始,数到 9 的人下船。 如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢? #include<stdio.h> int c = 0; int i = 1; int j = 0;
C#单例
单例模式: 步骤: 1.定义静态私有对象 2.构造函数私有化 3.定义一个静态的,返回值为该类型的方法,一般以Getinstance/getInit为方法名称 单例模式有懒汉和饿汉,最好使用饿汉 1.饿汉式---先实例化 public class Singleton { private stati
C#的单例模式 以及 消息分发机制实现
C#单例模式,多线程安全 //Singleton.cs public class Singleton<T> where T : new() {     private static T _instance;     private static object _lock = new object();
C#操作MongoDB的简单实例
  最近比较忙,很久没更新了(虽然没人看,也没人在乎,也要记得be yourself),   前面分享了一些mongodb的安装和简单的语法,今天模仿支付宝首页的模块移动功能,用mongo做一个简单的后台实例。   one,启动本地的mongo服务like this. ![](https://oscimg.oschina.net/oscnet/adc1
Java单例模式
**什么是单例模式**   单例模式是在程序中,一个类保证只有一个实例,并提供统一的访问入口。 **为什么要用单例模式** * 节省内存 节省计算 * 如对象实例中的一样的,那就不用每次都创建一个对象 * 方便管理 * 因为单例提供一个统一的访问入口,不需要创建N多个对象,很多工具类都用了单例实现,如日志、字符串工具类 *
java枚举类单例示例
public class Singleton {     //私有化构造函数     private Singleton(){ }       //定义一个静态枚举类     static enum SingletonEnum{         //创建一个枚举对象,该对象先天为单例         INSTANCE;    
PHP单例模式
<?php /** * 设计模式之单例模式 * $_instance必须声明为静态的私有变量 * 构造函数和析构函数必须声明为私有,防止外部程序new * 类从而失去单例模式的意义 * getInstance()方法必须设置为公有的,必须调用此方法 * 以返回实例的一个引
Unity 亲历面试题
**1  用c# 实现单例** 参考:  [https://www.cnblogs.com/Dean27/p/7744452.html](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fwww.cnblogs.com%2FDean27%2Fp%2F7744452.html)  继承Mo
C#设计模式(1)——单例模式(Singleton)
单例模式即所谓的一个类只能有一个实例, 也就是类只能在内部实例一次,然后提供这一实例,外部无法对此类实例化。 单例模式的特点: 1、只能有一个实例; 2、只能自己创建自己的唯一实例; 3、必须给所有其他的对象提供这一实例。 **普通单例模式(没有考虑线程安全)**   /// <summary> /// 单例模式
ECharts.js 简单示例
[ECharts.js学习(一) 简单入门](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fwww.cnblogs.com%2Fleoxuan%2Fp%2F6511123.html) =====================================================
Struts2单例和多例
struts2中action是多例的,即一个session产生一个action如果是单例的话,若出现两个用户都修改一个对象的属性值,则会因为用户修改时间不同,两个用户访问得到的属性不一样,操作得出的结果不一样.举个例子:有一块布长度300cm,能做一件上衣(用掉100cm)和一件裤子(用掉200cm);甲和乙同时访问得到的长度都是300cm,甲想做上
thrift简单示例 (基于C++)
这个thrift的简单示例, 来源于官网 (http://thrift.apache.org/tutorial/cpp), 因为我觉得官网的例子已经很简单了, 所以没有写新的示例, 关于安装的教程, 可以参考https://www.cnblogs.com/albizzia/p/10838646.html, 关于thrift文件的语法, 可以参考: https