KisaragiLibrary
 
読み取り中…
検索中…
一致する文字列を見つけられません
Singleton.hpp
[詳解]
1#pragma once
2
3#include <cassert>
4#include <mutex>
5#include <functional>
6
7namespace Kisaragi_Lib
8{
9 /// <summary>
10 /// mozc Singletonp^[
11 ///
12 /// gp :
13 /// hoge& hoge = Singleton<hpge>::GetInstance();
14 /// </summary>
16 public:
17 //ʖ`
18 using FinalizerFunc = std::function<void()>;
19
20 /// <summary>
21 /// Finalizeo^.
22 /// </summary>
23 /// <param name="func">Finalize</param>
24 static void addFinalizer(FinalizerFunc func);
25
26 /// <summary>
27 /// o^ꂽFinalizes.
28 /// </summary>
29 static void finalize();
30 };
31
32 template <typename T>
33 class Singleton final {
34 public:
35 /// <summary>
36 /// T^̃CX^X擾.
37 /// </summary>
38 /// <returns>T^̃CX^X</returns>
39 static T& GetInstance() {
40 std::call_once(initFlag, create);
41 assert(instance);
42 return *instance;
43 }
44
45 //TODO weak_ptrłKvɋ^₪c
46 /// <summary>
47 /// T^̃CX^Xptr擾
48 /// </summary>
49 /// <returns></returns>
50 static std::weak_ptr<T> GetPtr()
51 {
52 std::call_once(initFlag, create);
53 assert(instance);
54 return instance;
55 }
56
57 private:
58 /// <summary>
59 /// CX^X.
60 /// </summary>
61 static void create() {
62 instance = std::make_shared<T>();
64 }
65
66 /// <summary>
67 /// CX^X폜
68 /// </summary>
69 static void destroy() {
70 instance.reset();
71 }
72
73 static std::once_flag initFlag;
74 static std::shared_ptr<T> instance;
75 };
76
77 template <typename T> std::once_flag Singleton<T>::initFlag;
78 template <typename T> std::shared_ptr<T> Singleton<T>::instance;
79}
mozc Singletonp^[
Definition Singleton.hpp:15
static void addFinalizer(FinalizerFunc func)
Finalizeo^.
Definition Singleton.cpp:23
std::function< void()> FinalizerFunc
Definition Singleton.hpp:18
static void finalize()
o^ꂽFinalizes.
Definition Singleton.cpp:35
Definition Singleton.hpp:33
static T & GetInstance()
T^̃CX^X擾.
Definition Singleton.hpp:39
static std::once_flag initFlag
Definition Singleton.hpp:73
static std::shared_ptr< T > instance
Definition Singleton.hpp:74
static std::weak_ptr< T > GetPtr()
T^̃CX^Xptr擾
Definition Singleton.hpp:50
static void create()
CX^X.
Definition Singleton.hpp:61
static void destroy()
CX^X폜
Definition Singleton.hpp:69
Definition Accessor.hpp:110