C++实现单例模式的方法

这篇文章主要为大家介绍了C++实现单例模式的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

饿汉模式

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

 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  #include  #include  class Singleton { public: typedef std::shared_ptr Ptr; static Ptr get_instance() { if(m_instance_ptr == nullptr) { std::lock_guard lk(m_mutex); if(m_instance_ptr == nullptr) m_instance_ptr = std::shared_ptr(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; } 

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注0133技术站的更多内容!

以上就是C++实现单例模式的方法的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » C语言