C++实现单例模式的方法
程序员文章站
2022-03-04 14:00:15
目录饿汉模式懒汉模式锁 + 智能指针局部静态变量总结饿汉模式类实例化就会占用内存,浪费资源,效率高,不存在线程安全问题。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; }
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注的更多内容!
上一篇: C语言实战之纸牌游戏
下一篇: 2021年10大风口,7个已熄火