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

singleton_singleton饿汉式_singleton饿汉(3)

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

新实现最大的变化,在于将以前的类静态变量从类实例变成了类指针,并在instance()函数中需要时通过new操作符创建类实例。指针在C++中仍是当作一种原始数据类型处理的,其初始化与类实例的初始化不同,不需调用类构造函数。在这一实现中,两个类的静态变量p_instance_的初始化都是在程序的.bss段初始化时一次性完成的。singleton

这一实现中由于类的实例是通过new操作符获得的,所以需要为类定义释放实例的函数(图中省略了),并由在合适的时机调用。为了省去这类麻烦,作者更推崇图4所示的实现方式。

  1. main.c 
  2. 00005: class singleton1_t 
  3. 00006: { 
  4. 00007: public
  5. 00008:     static singleton1_t *instance () 
  6. 00009:     { 
  7. 00010:         if (0 == p_instance_) { 
  8. 00011:             static singleton1_t instance; 
  9. 00012:             p_instance_ = &instance; 
  10. 00013:         } 
  11. 00014:         return p_instance_; 
  12. 00015:     } 
  13. 00016: 
  14. 00017:     void count_increase () {count_ ++;} 
  15. 00018:     int count () const {return count_;} 
  16. 00019: 
  17. 00020: private
  18. 00021:     singleton1_t (): count_ (0) {} 
  19. 00022:     ~singleton1_t () {} 
  20. 00023: 
  21. 00024:     static singleton1_t *p_instance_; 
  22. 00025:     int count_; 
  23. 00026: }; 

通过在函数内部定义静态变量的方法获得类实例,一方面简化了类接口的实现,另一方面又降低了因为忘记调用释放接口函数而导致内存泄漏的可能。需要提醒的是,在这种实现方法中,类实例的构造是发生在各类的instance()函数第一次被调用时,而各实例的析构又是以与构造相反的顺序进行的,且后者是由编程语言环境所保证的。


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

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

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