KisaragiLibrary
èªã�¿å�–りä¸â€¦
検索ä¸â€¦
一致ã�™ã‚‹æ–‡å—列を見ã�¤ã�‘られã�¾ã�›ã‚“
Singleton.hpp
[詳解]
1
#pragma once
2
3
#include <cassert>
4
#include <mutex>
5
#include <functional>
6
7
namespace
Kisaragi_Lib
8
{
9
/// <summary>
10
/// mozcŽ® Singletonƒpƒ^�[ƒ“
11
///
12
/// Žg—p—á :
13
/// hoge& hoge = Singleton<hpge>::GetInstance();
14
/// </summary>
15
class
SingletonFinalizer
{
16
public
:
17
//•Ê–¼’è‹`
18
using
FinalizerFunc
= std::function<void()>;
19
20
/// <summary>
21
/// Finalize‚ð“o˜^.
22
/// </summary>
23
/// <param name="func">Finalize</param>
24
static
void
addFinalizer
(
FinalizerFunc
func);
25
26
/// <summary>
27
/// “o˜^‚³‚ꂽFinalize‚ðŽÀ�s‚·‚é.
28
/// </summary>
29
static
void
finalize
();
30
};
31
32
template
<
typename
T>
33
class
Singleton
final {
34
public
:
35
/// <summary>
36
/// TŒ^‚̃Cƒ“ƒXƒ^ƒ“ƒX‚ðŽæ“¾‚·‚é.
37
/// </summary>
38
/// <returns>TŒ^‚̃Cƒ“ƒXƒ^ƒ“ƒX</returns>
39
static
T&
GetInstance
() {
40
std::call_once(
initFlag
,
create
);
41
assert(
instance
);
42
return
*
instance
;
43
}
44
45
//TODO weak_ptr‚Å‚ ‚é•K—v�«‚É‹^–₪Žc‚é
46
/// <summary>
47
/// TŒ^‚̃Cƒ“ƒXƒ^ƒ“ƒ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
/// ƒCƒ“ƒXƒ^ƒ“ƒX�¶�¬.
60
/// </summary>
61
static
void
create
() {
62
instance
= std::make_shared<T>();
63
SingletonFinalizer::addFinalizer
(&
Singleton<T>::destroy
);
64
}
65
66
/// <summary>
67
/// ƒCƒ“ƒXƒ^ƒ“ƒ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
}
Kisaragi_Lib::SingletonFinalizer
mozcŽ® Singletonƒpƒ^�[ƒ“
Definition
Singleton.hpp:15
Kisaragi_Lib::SingletonFinalizer::addFinalizer
static void addFinalizer(FinalizerFunc func)
Finalize‚ð“o˜^.
Definition
Singleton.cpp:23
Kisaragi_Lib::SingletonFinalizer::FinalizerFunc
std::function< void()> FinalizerFunc
Definition
Singleton.hpp:18
Kisaragi_Lib::SingletonFinalizer::finalize
static void finalize()
“o˜^‚³‚ꂽFinalize‚ðŽÀ�s‚·‚é.
Definition
Singleton.cpp:35
Kisaragi_Lib::Singleton
Definition
Singleton.hpp:33
Kisaragi_Lib::Singleton::GetInstance
static T & GetInstance()
TŒ^‚̃Cƒ“ƒXƒ^ƒ“ƒX‚ðŽæ“¾‚·‚é.
Definition
Singleton.hpp:39
Kisaragi_Lib::Singleton::initFlag
static std::once_flag initFlag
Definition
Singleton.hpp:73
Kisaragi_Lib::Singleton::instance
static std::shared_ptr< T > instance
Definition
Singleton.hpp:74
Kisaragi_Lib::Singleton::GetPtr
static std::weak_ptr< T > GetPtr()
TŒ^‚̃Cƒ“ƒXƒ^ƒ“ƒXptr‚ðŽæ“¾
Definition
Singleton.hpp:50
Kisaragi_Lib::Singleton::create
static void create()
ƒCƒ“ƒXƒ^ƒ“ƒX�¶�¬.
Definition
Singleton.hpp:61
Kisaragi_Lib::Singleton::destroy
static void destroy()
ƒCƒ“ƒXƒ^ƒ“ƒX�í�œ
Definition
Singleton.hpp:69
Kisaragi_Lib
Definition
Accessor.hpp:110
src
DesignPattern
Singleton
Singleton.hpp
構築:
1.13.2