如果在需要用到单例类对象时直接使用static成员对象,那么由于编译器对于不同的编译单元的编译顺序的不确定性,有可能在用到该static对象的时候该对象还没有初始化,而用函数sharedXX()创建单例类的static对象则可避免这一问题,因为C++保证,函数内的local static对象会在“该函数被调用期间”“首次遇上该对象之定义式”时被初始化。
参见Effective C++ 条款4
如果在需要用到单例类对象时直接使用static成员对象,那么由于编译器对于不同的编译单元的编译顺序的不确定性,有可能在用到该static对象的时候该对象还没有初始化,而用函数sharedXX()创建单例类的static对象则可避免这一问题,因为C++保证,函数内的local static对象会在“该函数被调用期间”“首次遇上该对象之定义式”时被初始化。
参见Effective C++ 条款4