c++11 实现单例模式

浪人 57 0 0

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;

预览图
收藏
评论区