尧图精选

C++实现 单例模式实例详解

🕒 发布时间:2026/10/1 3:32:50 📁 来源:尧图网络
设计模式之单例模式C实现一、经典实现(非线程安全)1234567891011121314151617classSingleton{public:staticSingleton* getInstance();protected:Singleton(){}private:staticSingleton *p;};Singleton* Singleton::p NULL;Singleton* Singleton::getInstance(){if(NULL p)p newSingleton();returnp;}二、懒汉模式与饿汉模式懒汉故名思义不到万不得已就不会去实例化类也就是说在第一次用到类实例的时候才会去实例化所以上边的经典方法被归为懒汉实现饿汉饿了肯定要饥不择食。所以在单例类定义的时候就进行实例化。特点与选择由于要进行线程同步所以在访问量比较大或者可能访问的线程比较多时采用饿汉实现可以实现更好的性能。这是以空间换时间。在访问量较小时采用懒汉实现。这是以时间换空间。线程安全的懒汉模式1.加锁实现线程安全的懒汉模式123456789101112131415161718192021222324252627classSingleton{public:staticpthread_mutex_t mutex;staticSingleton* getInstance();protected:Singleton(){pthread_mutex_init(mutex);}private:staticSingleton* p;};pthread_mutex_t Singleton::mutex;Singleton* Singleton::p NULL;Singleton* Singleton::getInstance(){if(NULL p){pthread_mutex_lock(mutex);if(NULL p)p newSingleton();pthread_mutex_unlock(mutex);}returnp;}2.内部静态变量实现懒汉模式1234567891011121314151617181920classSingleton{public:staticpthread_mutex_t mutex;staticSingleton* getInstance();protected:Singleton(){pthread_mutex_init(mutex);}};pthread_mutex_t Singleton::mutex;Singleton* Singleton::getInstance(){pthread_mutex_lock(mutex);staticsingleton obj;pthread_mutex_unlock(mutex);returnobj;}饿汉模式(本身就线程安全)123456789101112131415classSingleton{public:staticSingleton* getInstance();protected:Singleton(){}private:staticSingleton* p;};Singleton* Singleton::p newSingleton;Singleton* Singleton::getInstance(){returnp;}感谢阅读希望能帮助到大家
上一篇/下一篇内容由系统自动关联 返回资讯列表 →