先给出一个列子:
class ThreadManager {
public:
// global singleton
static ThreadManager &GetInstance(void);
}
// global singleton
ThreadManager &ThreadManager::GetInstance(void) {
static ThreadManager thread_manager(NUM_THREAD);
return thread_manager;
}
上面例子中,我们使用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