boyunzheyue2

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

最近正在面试,遇到一个问题,说在多线程情况下实现单例,但是不使用锁的情况下如何实现

 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++标准规定,非整型和枚举型静态常量类成员需要在类外进行初始化

 

posted on 2016-06-29 09:25  boyunzheyue2  阅读(150)  评论(0)    收藏  举报