b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

singleton_singleton饿汉式_singleton饿汉

电脑杂谈  发布时间:2016-11-26 02:08:39  来源:网络整理

如果某个类管理了系统中唯一的某种资源,那么我们只能创建该类的一个实例,此时用到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 () {} 
  36. 00035: 
  37. 00036:     static singleton2_t instance_; 
  38. 00037: }; 
  39. 00038: 
  40. 00039: singleton2_t singleton2_t::instance_; 
  41. 00040: singleton1_t singleton1_t::instance_; 
  42. 00041: 
  43. 00042: int main () 
  44. 00043: { 
  45. 00044:     (void) singleton2_t::instance (); 
  46. 00045:     cout << "count = " << singleton1_t::instance ()->count () << endl; 
  47. 00046:     return 0; 
  48. 00047: } 


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-21891-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...