千家信息网

C++实现单例模式的方法是什么

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章将为大家详细讲解有关C++实现单例模式的方法是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。饿汉模式类实例化就会占用内存,浪费资源,效率高
千家信息网最后更新 2025年01月20日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;}

关于C++实现单例模式的方法是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

0