common_util 1.1.0
Loading...
Searching...
No Matches
singleton.h
Go to the documentation of this file.
1
19#pragma once
20
21#include <mutex>
22
27#undef CUTL_COPY_AND_ASSIGN
28#define CUTL_COPY_AND_ASSIGN(classname) \
29 classname(const classname &) = delete; \
30 classname &operator=(const classname &) = delete;
31
37#undef CUTL_SINGLETON_PTR
38#define CUTL_SINGLETON_PTR(classname) \
39public: \
40 static classname* get_instance() \
41 { \
42 static classname* obj = nullptr; \
43 if (!obj) \
44 { \
45 static std::once_flag flag; \
46 std::call_once(flag, [&] { obj = new (std::nothrow) classname(); }); \
47 } \
48 return obj; \
49 } \
50 ~classname(); \
51 \
52private: \
53 classname(); \
54 CUTL_COPY_AND_ASSIGN(classname)
55
60#undef CUTL_SINGLETON_PTR_DEFAULT_CTOR
61#define CUTL_SINGLETON_PTR_DEFAULT_CTOR(classname) \
62public: \
63 static classname* get_instance() \
64 { \
65 static classname* obj = nullptr; \
66 if (!obj) \
67 { \
68 static std::once_flag flag; \
69 std::call_once(flag, [&] { obj = new (std::nothrow) classname(); }); \
70 } \
71 return obj; \
72 } \
73 ~classname(); \
74 \
75private: \
76 classname() = default; \
77 CUTL_COPY_AND_ASSIGN(classname)
78
83#undef CUTL_SINGLETON_REF
84#define CUTL_SINGLETON_REF(classname) \
85public: \
86 static classname& get_instance() \
87 { \
88 static classname obj; \
89 return obj; \
90 } \
91 ~classname(); \
92 \
93private: \
94 classname(); \
95 CUTL_COPY_AND_ASSIGN(classname)
96
101#undef CUTL_SINGLETON_REF_DEFAULT_CTOR
102#define CUTL_SINGLETON_REF_DEFAULT_CTOR(classname) \
103public: \
104 static classname& get_instance() \
105 { \
106 static classname obj; \
107 return obj; \
108 } \
109 ~classname(); \
110 \
111private: \
112 classname() = default; \
113 CUTL_COPY_AND_ASSIGN(classname)