最近正在面试,遇到一个问题,说在多线程情况下实现单例,但是不使用锁的情况下如何实现
1 class SingletonStatic 2 { 3 private: 4 SingletonStatic() 5 { 6 std::cout<<"This construct Fun"<<std::endl; 7 } 8 const static SingletonStatic *m_instance; 9 public: 10 11 const static SingletonStatic *getInstance() 12 { 13 return m_instance; 14 } 15 16 }; 17 18 const SingletonStatic* SingletonStatic::m_instance = new SingletonStatic();
执行结果如下

可以看到在调用getInstance函数时,实例就已经完成了初始化,这里有个疑问为什么声明为private的m_instance对象可以在类外进行初始化?
因为C++标准规定,非整型和枚举型静态常量类成员需要在类外进行初始化
浙公网安备 33010602011771号