background image

C++

 

 中实现

 

     Singleton

 

     的正确方法

 

 

如果某个类管理了系统中唯一的某种资源,那么我们只能创建该类的一个实
例,此时用到 singleton

设计模式(后面为了简化将省略 设计模式 四个

字)就比较合适了。然而,如果不注意实现方法,就很有可能会让我们碰到一
些莫名其妙的错误。图 1 是经过简化所得到的一个实现错误的例子。

1.

main.c

 

  

2. 00001: #include <iostream> 
3. 00002: 
4. 00003: using namespace std; 
5. 00004: 
6. 00005: class singleton1_t 
7. 00006: { 
8. 00007: public: 
9. 00008:     static singleton1_t *instance () 
10. 00009:     { 
11. 00010:         return &instance_; 
12. 00011:     } 
13. 00012: 
14. 00013:     void count_increase () {count_ ++;} 
15. 00014:     int count () const {return count_;} 
16. 00015: 
17. 00016: private: 
18. 00017:     singleton1_t (): count_ (0) {} 
19. 00018:     ~singleton1_t () {} 
20. 00019: 
21. 00020:     static singleton1_t instance_; 
22. 00021:     int count_; 
23. 00022: }; 
24. 00023: 
25. 00024: class singleton2_t 
26. 00025: { 
27. 00026: public: 
28. 00027:     static singleton2_t *instance () 
29. 00028:     { 
30. 00029:         return &instance_; 
31. 00030:     } 
32. 00031: 
33. 00032: private: 
34. 00033:     singleton2_t () {singleton1_t::instance ()-

>count_increase ();} 

35. 00034:     ~singleton2_t () {}