c/c++语言开发共享C++实现单例模式的方法

目录饿汉模式懒汉模式锁 + 智能指针局部静态变量总结饿汉模式类实例化就会占用内存,浪费资源,效率高,不存在线程安全问题。class singleton{ singleton() { } s

目录
  • 饿汉模式
  • 懒汉模式
    • 锁 + 智能指针
    • 局部静态变量
  • 总结

    饿汉模式

    类实例化就会占用内存,浪费资源,效率高,不存在线程安全问题。

      class singleton{      singleton() { }      static singleton* m_instance_ptr;  public:      static singleton* get_instance() {          return m_instance_ptr;  	}  };  singleton* singleton::m_instance_ptr = new singleton();  int main(){      singleton* instance1 = singleton::get_instance();      singleton* instance2 = singleton::get_instance();      return 0;  }  

    懒汉模式

    延迟加载,节省资源,效率低,存在线程安全问题。

      class singleton {      singleton() { }      static singleton* m_instance_ptr;  public:      static singleton* get_instance() {          if(m_instance_ptr == nullptr)  			m_instance_ptr = new singleton();          return m_instance_ptr;      }  };  singleton* singleton::m_instance_ptr = nullptr;  int main(){      singleton* instance1 = singleton::get_instance();      singleton* instance2 = singleton::get_instance();      return 0;  }  

    锁 + 智能指针

    线程安全(锁)+ 内存回收(智能指针)

      #include <iostream>  #include <memory>  #include <mutex>  class singleton {  public:  	typedef std::shared_ptr<singleton> ptr;      static ptr get_instance() {          if(m_instance_ptr == nullptr) {              std::lock_guard<std::mutex> lk(m_mutex);              if(m_instance_ptr == nullptr)  				m_instance_ptr = std::shared_ptr<singleton>(new singleton);          }          return m_instance_ptr;      }  private:  	singleton() {}      static ptr m_instance_ptr;      static std::mutex m_mutex;  };  singleton::ptr singleton::m_instance_ptr = nullptr;  std::mutex singleton::m_mutex;  int main(){      singleton::ptr instance1 = singleton::get_instance();      singleton::ptr instance2 = singleton::get_instance();      return 0;  }  

    局部静态变量

      class singleton {  public:      singleton(const singleton&)=delete;      static singleton& get_instance() {          static singleton instance;          return instance;      }  private:      singleton() {}  };  int main() {  	singleton& instance1 = singleton::get_instance();      singleton& instance2 = singleton::get_instance();      return 0;  }  

    总结

    本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注<计算机技术网(www.ctvol.com)!!>的更多内容!

    需要了解更多c/c++开发分享C++实现单例模式的方法,都可以关注C/C++技术分享栏目—计算机技术网(www.ctvol.com)!

    本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

    ctvol管理联系方式QQ:251552304

    本文章地址:https://www.ctvol.com/c-cdevelopment/990736.html

    (0)
    上一篇 2021年12月25日
    下一篇 2021年12月25日

    精彩推荐