最推荐的懒汉式单例(magic static)——局部静态变量

  1. #include <iostream>
  2. class Singleton
  3. {
  4. public:
  5. ~Singleton(){
  6. std::cout<<"destructor called!"<<std::endl;
  7. }
  8. Singleton(const Singleton&)=delete;
  9. Singleton& operator=(const Singleton&)=delete;
  10. static Singleton& get_instance(){
  11. static Singleton instance;
  12. return instance;
  13. }
  14. private:
  15. Singleton(){
  16. std::cout<<"constructor called!"<<std::endl;
  17. }
  18. };
  19. int main(int argc, char *argv[])
  20. {
  21. Singleton& instance_1 = Singleton::get_instance();
  22. Singleton& instance_2 = Singleton::get_instance();
  23. return 0;
  24. }

运行结果:

  1. constructor called!
  2. destructor called!

这是最推荐的一种单例实现方式

  1. 通过局部静态变量的特性保证了线程安全 (C++11, GCC > 4.3, VS2015支持该特性);
  2. 不需要使用共享指针,代码简洁;
  3. 注意在使用的时候需要声明单例的引用 Single& 才能获取对象。

    参考

  4. C++ 单例模式总结