이건 싱글턴 클래스


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
template < typename T >
class singleton
{
public:
 
  template < typename ...Args >
  static void create(Args... args)
  {
    unique_instance = std::make_unique<T>(args...);
  }
 
  static T& get_instance()
  {
    return *unique_instance;
  }
 
  static void destory()
  {
    unique_instance.reset();
  }
 
private:
 
  static std::unique_ptr<T> unique_instance;
};
 
template < typename T >
std::unique_ptr<T> singleton<T>::unique_instance = nullptr;
cs


싱글턴으로 만들 클래스


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class any_class : public singleton<any_class>
{
public:
 
  any_class(int value) :
    value_{ value }
  {
  }
 
  void emit()
  {
    std::cout << value_ << std::endl;
  }
 
private:
 
  int value_;
};
cs



사용 예


1
2
3
4
5
6
7
8
int main()
{
  any_class::create(1);
 
  any_class::get_instance().emit();
 
  return 0;
}
cs