目录
- 饿汉模式
- 懒汉模式
- 锁 + 智能指针
- 局部静态变量
- 总结
饿汉模式
类实例化就会占用内存,浪费资源,效率高,不存在线程安全问题。
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