C++中关于静态对象的使用( local static object and global static object)

来源:互联网 发布:富士施乐驱动for mac 编辑:程序博客网 时间:2024/05/21 14:00
原文:http://blog.csdn.net/matrixyy/article/details/50806958

办?》

C++中关于静态对象的使用( local static object and global static object)

674人阅读 评论(0)收藏举报
本文章已收录于:

先给出一个列子:


[cpp] view plain copy
print?
  1. class ThreadManager {  
  2.   
  3.  public:  
  4.   // global singleton  
  5.   static ThreadManager &GetInstance(void);  
  6.   
  7. }  
  8.   
  9. // global singleton  
  10. ThreadManager &ThreadManager::GetInstance(void) {  
  11.   static ThreadManager thread_manager(NUM_THREAD);  
  12.   return thread_manager;  
  13. }  

上面例子中,我们使用ThreadManager::GetInstance获得static的ThreadManager实例(对象),static类型变量只被初始化一次,所以每次调用ThreadManager::GetInstance都返回同一个对象,不会多次init。


上面这种使用函数的形式返回static对象的方式称之为local static object. 而直接在程序中定义static ThreadManager的方式称之为global static object。使用local static object可以解决所谓的static object调用顺序的问题。


该问题简单描述如下:如果有两个static object x 和 y 。 x里面调用了y,但是如果x编译的时候y还没有被编译,就会出现调用错误。而使用函数返回static的方式,因为只有用到y的时候才会使用函数返回y,这样顺序就确定了。


上面的方式也是global singleton的常用形式


有问题请联系我:zhangtiey@gmail.com

原创粉丝点击