1 #include <iostream>
2
3 class SingleTone
4 {
5 private:
6 int m_iProp;
7
8 public:
9 static SingleTone& GetInstance()
10 {
11 static SingleTone instance;
12 return(instance);
13 }
14
15 void SetProp(int val)
16 {
17 m_iProp = val;
18 }
19
20 int GetProp() const
21 {
22 return (m_iProp);
23 }
24
25 private:
26 SingleTone() : m_iProp(0)
27 {
28 }
29 // SingleTone instance = SingleTone::GetInstance() is not allowed;
30 // SingleTone& instanceRef = SingleTone::GetInstance() is correct.
31 SingleTone(const SingleTone&);
32 };
33
34 class MonoState
35 {
36 private:
37 static MonoState* s_pInstance;
38
39 private:
40 int m_iProp;
41
42 public:
43 static MonoState& GetInstance()
44 {
45 if(0 == s_pInstance)
46 s_pInstance = new MonoState;
47 return(*s_pInstance);
48 }
49
50 public:
51 void SetProp(int val)
52 {
53 m_iProp = val;
54 }
55
56 int GetProp() const
57 {
58 return(m_iProp);
59 }
60
61 private:
62 MonoState() : m_iProp(0)
63 {
64 }
65
66 MonoState(const MonoState&);
67 };
68
69 MonoState* MonoState::s_pInstance = 0;
70
71
72 int main(int argc, char* argv[])
73 {
74 SingleTone& firstInstance = SingleTone::GetInstance();
75 firstInstance.SetProp(10);
76 std::cout << "firstInstance: " << firstInstance.GetProp() << std::endl;
77
78 SingleTone& secondInstance = SingleTone::GetInstance();
79 std::cout << "secondInstance: " << secondInstance.GetProp() << std::endl;
80
81
82 MonoState& firstMonostate = MonoState::GetInstance();
83 firstMonostate.SetProp(10);
84 std::cout << "firstMonostate: " << firstMonostate.GetProp() << std::endl;
85
86 MonoState& secondMonostate = MonoState::GetInstance();
87 std::cout << "secondMonostate: " << secondMonostate.GetProp() << std::endl;
88
89 return(0);
90 }