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

Posted codecomposer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个基于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

 

以上是关于一个基于C++11的单例模板类的主要内容,如果未能解决你的问题,请参考以下文章

面经最频繁的单例模式一文彻底整明白

基于unity的单例设计模式写法

性能比较好的单例写法

C++11标准下的单例设计模式

C#的单例模式[关闭]

@synchronized() 作为目标 C 中的单例方法有啥作用?